//----------------------------------------------------- // name: "freeverb" // version: "1.0" // author: "Grame" // license: "BSD" // copyright: "(c)GRAME 2006" // // Code generated with Faust 0.9.10 (http://faust.grame.fr) //----------------------------------------------------- /* link with */ /* link with */ #include /* link with */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "HardwareClock.h" using namespace std; // 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 //#define BENCHMARKMODE struct Meta : map { void declare (const char* key, const char* value) { (*this)[key] = value; } }; //inline void *aligned_calloc(size_t nmemb, size_t size) { return (void*)((unsigned)(calloc((nmemb*size)+15,sizeof(char)))+15 & 0xfffffff0); } // g++ -O3 -lm -ljack `gtk-config --cflags --libs` ex2.cpp #define max(x,y) (((x)>(y)) ? (x) : (y)) #define min(x,y) (((x)<(y)) ? (x) : (y)) inline int lsr(int x, int n) { return int(((unsigned int)x) >> n); } inline int int2pow2(int x) { int r=0; while ((1< fPrefix; map fKeyParam; void addOption(const char* label, float* zone, float init, float min, float max) { string fullname = fPrefix.top() + label; fKeyParam.insert(make_pair(fullname, param(zone, min, max))); *zone = init; } void openAnyBox(const char* label) { string prefix; if (label && label[0]) { prefix = fPrefix.top() + "-" + label; } else { prefix = fPrefix.top(); } fPrefix.push(prefix); } public: CMDUI(int argc, char *argv[]) : UI(), fArgc(argc), fArgv(argv) { fPrefix.push("--"); } virtual ~CMDUI() {} virtual void addButton(const char* label, float* zone) {}; virtual void addToggleButton(const char* label, float* zone) {}; virtual void addCheckButton(const char* label, float* zone) {}; virtual void addVerticalSlider(const char* label, float* zone, float init, float min, float max, float step) { addOption(label,zone,init, min,max); } virtual void addHorizontalSlider(const char* label, float* zone, float init, float min, float max, float step) { addOption(label,zone,init, min,max); } virtual void addNumEntry(const char* label, float* zone, float init, float min, float max, float step) { addOption(label,zone,init, min,max); } // -- passive widgets virtual void addNumDisplay(const char* label, float* zone, int precision) {} virtual void addTextDisplay(const char* label, float* zone, char* names[], float min, float max) {} virtual void addHorizontalBargraph(const char* label, float* zone, float min, float max) {} virtual void addVerticalBargraph(const char* label, float* zone, float min, float max) {} virtual void openFrameBox(const char* label) { openAnyBox(label); } virtual void openTabBox(const char* label) { openAnyBox(label); } virtual void openHorizontalBox(const char* label) { openAnyBox(label); } virtual void openVerticalBox(const char* label) { openAnyBox(label); } virtual void closeBox() { fPrefix.pop(); } virtual void show() {} virtual void run() { char c; printf("Type 'q' to quit\n"); while ((c = getchar()) != 'q') { sleep(1); } } void print() { map::iterator i; cout << fArgc << "\n"; cout << fArgv[0] << " option list : "; for (i = fKeyParam.begin(); i != fKeyParam.end(); i++) { cout << "[ " << i->first << " " << i->second.fMin << ".." << i->second.fMax <<" ] "; } } void process_command() { map::iterator p; for (int i = 1; i < fArgc; i++) { if (fArgv[i][0] == '-') { p = fKeyParam.find(fArgv[i]); if (p == fKeyParam.end()) { cout << fArgv[0] << " : unrecognized option " << fArgv[i] << "\n"; print(); exit(1); } char* end; *(p->second.fZone) = float(strtod(fArgv[i+1], &end)); i++; } } } void process_init() { map::iterator p; for (int i = 1; i < fArgc; i++) { if (fArgv[i][0] == '-') { p = fKeyParam.find(fArgv[i]); if (p == fKeyParam.end()) { cout << fArgv[0] << " : unrecognized option " << fArgv[i] << "\n"; exit(1); } char* end; *(p->second.fZone) = float(strtod(fArgv[i+1], &end)); i++; } } } }; /****************************************************************************** ******************************************************************************* FAUST DSP ******************************************************************************* *******************************************************************************/ //---------------------------------------------------------------- // abstract definition of a signal processor //---------------------------------------------------------------- class dsp { protected: int fSamplingFreq; public: dsp() {} virtual ~dsp() {} virtual int getNumInputs() = 0; virtual int getNumOutputs() = 0; virtual void buildUserInterface(UI* interface) = 0; virtual void init(int samplingRate) = 0; virtual void compute(int len, float** inputs, float** outputs) = 0; }; //---------------------------------------------------------------------------- // FAUST generated signal processor //---------------------------------------------------------------------------- #ifndef FAUSTFLOAT #define FAUSTFLOAT float #endif typedef long double quad; class mydsp : public dsp{ private: FAUSTFLOAT fslider0; float fRec9_perm[4]; FAUSTFLOAT fslider1; float fRec19_perm[4]; float fYec0[4096]; int fYec0_idx; int fYec0_idx_save; float fRec18_perm[4]; float fRec21_perm[4]; float fYec1[4096]; int fYec1_idx; int fYec1_idx_save; float fRec20_perm[4]; float fRec23_perm[4]; float fYec2[4096]; int fYec2_idx; int fYec2_idx_save; float fRec22_perm[4]; float fRec25_perm[4]; float fYec3[4096]; int fYec3_idx; int fYec3_idx_save; float fRec24_perm[4]; float fRec27_perm[4]; float fYec4[4096]; int fYec4_idx; int fYec4_idx_save; float fRec26_perm[4]; float fRec29_perm[4]; float fYec5[4096]; int fYec5_idx; int fYec5_idx_save; float fRec28_perm[4]; float fRec31_perm[4]; float fYec6[4096]; int fYec6_idx; int fYec6_idx_save; float fRec30_perm[4]; float fRec33_perm[4]; float fYec7[4096]; int fYec7_idx; int fYec7_idx_save; float fRec32_perm[4]; float fYec8[2048]; int fYec8_idx; int fYec8_idx_save; float fRec16_perm[4]; float fYec9[2048]; int fYec9_idx; int fYec9_idx_save; float fRec14_perm[4]; float fYec10[2048]; int fYec10_idx; int fYec10_idx_save; float fRec12_perm[4]; float fYec11[2048]; int fYec11_idx; int fYec11_idx_save; float fRec10_perm[4]; FAUSTFLOAT fslider2; float fRec43_perm[4]; float fYec12[4096]; int fYec12_idx; int fYec12_idx_save; float fRec42_perm[4]; float fRec45_perm[4]; float fYec13[4096]; int fYec13_idx; int fYec13_idx_save; float fRec44_perm[4]; float fRec47_perm[4]; float fYec14[4096]; int fYec14_idx; int fYec14_idx_save; float fRec46_perm[4]; float fRec49_perm[4]; float fYec15[4096]; int fYec15_idx; int fYec15_idx_save; float fRec48_perm[4]; float fRec51_perm[4]; float fYec16[4096]; int fYec16_idx; int fYec16_idx_save; float fRec50_perm[4]; float fRec53_perm[4]; float fYec17[4096]; int fYec17_idx; int fYec17_idx_save; float fRec52_perm[4]; float fRec55_perm[4]; float fYec18[4096]; int fYec18_idx; int fYec18_idx_save; float fRec54_perm[4]; float fRec57_perm[4]; float fYec19[4096]; int fYec19_idx; int fYec19_idx_save; float fRec56_perm[4]; float fYec20[2048]; int fYec20_idx; int fYec20_idx_save; float fRec40_perm[4]; float fYec21[2048]; int fYec21_idx; int fYec21_idx_save; float fRec38_perm[4]; float fYec22[2048]; int fYec22_idx; int fYec22_idx_save; float fRec36_perm[4]; float fYec23[2048]; int fYec23_idx; int fYec23_idx_save; float fRec34_perm[4]; float fYec24[4096]; int fYec24_idx; int fYec24_idx_save; float fRec8_perm[4]; float fRec59_perm[4]; float fYec25[4096]; int fYec25_idx; int fYec25_idx_save; float fRec58_perm[4]; float fRec61_perm[4]; float fYec26[4096]; int fYec26_idx; int fYec26_idx_save; float fRec60_perm[4]; float fRec63_perm[4]; float fYec27[4096]; int fYec27_idx; int fYec27_idx_save; float fRec62_perm[4]; float fRec65_perm[4]; float fYec28[4096]; int fYec28_idx; int fYec28_idx_save; float fRec64_perm[4]; float fRec67_perm[4]; float fYec29[4096]; int fYec29_idx; int fYec29_idx_save; float fRec66_perm[4]; float fRec69_perm[4]; float fYec30[4096]; int fYec30_idx; int fYec30_idx_save; float fRec68_perm[4]; float fRec71_perm[4]; float fYec31[4096]; int fYec31_idx; int fYec31_idx_save; float fRec70_perm[4]; float fYec32[2048]; int fYec32_idx; int fYec32_idx_save; float fRec6_perm[4]; float fYec33[2048]; int fYec33_idx; int fYec33_idx_save; float fRec4_perm[4]; float fYec34[2048]; int fYec34_idx; int fYec34_idx_save; float fRec2_perm[4]; float fYec35[2048]; int fYec35_idx; int fYec35_idx_save; float fRec0_perm[4]; float fRec81_perm[4]; float fYec36[4096]; int fYec36_idx; int fYec36_idx_save; float fRec80_perm[4]; float fRec83_perm[4]; float fYec37[4096]; int fYec37_idx; int fYec37_idx_save; float fRec82_perm[4]; float fRec85_perm[4]; float fYec38[4096]; int fYec38_idx; int fYec38_idx_save; float fRec84_perm[4]; float fRec87_perm[4]; float fYec39[4096]; int fYec39_idx; int fYec39_idx_save; float fRec86_perm[4]; float fRec89_perm[4]; float fYec40[4096]; int fYec40_idx; int fYec40_idx_save; float fRec88_perm[4]; float fRec91_perm[4]; float fYec41[4096]; int fYec41_idx; int fYec41_idx_save; float fRec90_perm[4]; float fRec93_perm[4]; float fYec42[4096]; int fYec42_idx; int fYec42_idx_save; float fRec92_perm[4]; float fRec95_perm[4]; float fYec43[4096]; int fYec43_idx; int fYec43_idx_save; float fRec94_perm[4]; float fYec44[2048]; int fYec44_idx; int fYec44_idx_save; float fRec78_perm[4]; float fYec45[2048]; int fYec45_idx; int fYec45_idx_save; float fRec76_perm[4]; float fYec46[2048]; int fYec46_idx; int fYec46_idx_save; float fRec74_perm[4]; float fYec47[2048]; int fYec47_idx; int fYec47_idx_save; float fRec72_perm[4]; public: static void metadata(Meta* m) { m->declare("name", "freeverb"); m->declare("version", "1.0"); m->declare("author", "Grame"); m->declare("license", "BSD"); m->declare("copyright", "(c)GRAME 2006"); } virtual int getNumInputs() { return 2; } virtual int getNumOutputs() { return 2; } static void classInit(int samplingFreq) { } virtual void instanceInit(int samplingFreq) { fSamplingFreq = samplingFreq; fslider0 = 0.5f; for (int i=0; i<4; i++) fRec9_perm[i]=0; fslider1 = 0.5f; for (int i=0; i<4; i++) fRec19_perm[i]=0; for (int i=0; i<4096; i++) fYec0[i]=0; fYec0_idx = 0; fYec0_idx_save = 0; for (int i=0; i<4; i++) fRec18_perm[i]=0; for (int i=0; i<4; i++) fRec21_perm[i]=0; for (int i=0; i<4096; i++) fYec1[i]=0; fYec1_idx = 0; fYec1_idx_save = 0; for (int i=0; i<4; i++) fRec20_perm[i]=0; for (int i=0; i<4; i++) fRec23_perm[i]=0; for (int i=0; i<4096; i++) fYec2[i]=0; fYec2_idx = 0; fYec2_idx_save = 0; for (int i=0; i<4; i++) fRec22_perm[i]=0; for (int i=0; i<4; i++) fRec25_perm[i]=0; for (int i=0; i<4096; i++) fYec3[i]=0; fYec3_idx = 0; fYec3_idx_save = 0; for (int i=0; i<4; i++) fRec24_perm[i]=0; for (int i=0; i<4; i++) fRec27_perm[i]=0; for (int i=0; i<4096; i++) fYec4[i]=0; fYec4_idx = 0; fYec4_idx_save = 0; for (int i=0; i<4; i++) fRec26_perm[i]=0; for (int i=0; i<4; i++) fRec29_perm[i]=0; for (int i=0; i<4096; i++) fYec5[i]=0; fYec5_idx = 0; fYec5_idx_save = 0; for (int i=0; i<4; i++) fRec28_perm[i]=0; for (int i=0; i<4; i++) fRec31_perm[i]=0; for (int i=0; i<4096; i++) fYec6[i]=0; fYec6_idx = 0; fYec6_idx_save = 0; for (int i=0; i<4; i++) fRec30_perm[i]=0; for (int i=0; i<4; i++) fRec33_perm[i]=0; for (int i=0; i<4096; i++) fYec7[i]=0; fYec7_idx = 0; fYec7_idx_save = 0; for (int i=0; i<4; i++) fRec32_perm[i]=0; for (int i=0; i<2048; i++) fYec8[i]=0; fYec8_idx = 0; fYec8_idx_save = 0; for (int i=0; i<4; i++) fRec16_perm[i]=0; for (int i=0; i<2048; i++) fYec9[i]=0; fYec9_idx = 0; fYec9_idx_save = 0; for (int i=0; i<4; i++) fRec14_perm[i]=0; for (int i=0; i<2048; i++) fYec10[i]=0; fYec10_idx = 0; fYec10_idx_save = 0; for (int i=0; i<4; i++) fRec12_perm[i]=0; for (int i=0; i<2048; i++) fYec11[i]=0; fYec11_idx = 0; fYec11_idx_save = 0; for (int i=0; i<4; i++) fRec10_perm[i]=0; fslider2 = 0.3333f; for (int i=0; i<4; i++) fRec43_perm[i]=0; for (int i=0; i<4096; i++) fYec12[i]=0; fYec12_idx = 0; fYec12_idx_save = 0; for (int i=0; i<4; i++) fRec42_perm[i]=0; for (int i=0; i<4; i++) fRec45_perm[i]=0; for (int i=0; i<4096; i++) fYec13[i]=0; fYec13_idx = 0; fYec13_idx_save = 0; for (int i=0; i<4; i++) fRec44_perm[i]=0; for (int i=0; i<4; i++) fRec47_perm[i]=0; for (int i=0; i<4096; i++) fYec14[i]=0; fYec14_idx = 0; fYec14_idx_save = 0; for (int i=0; i<4; i++) fRec46_perm[i]=0; for (int i=0; i<4; i++) fRec49_perm[i]=0; for (int i=0; i<4096; i++) fYec15[i]=0; fYec15_idx = 0; fYec15_idx_save = 0; for (int i=0; i<4; i++) fRec48_perm[i]=0; for (int i=0; i<4; i++) fRec51_perm[i]=0; for (int i=0; i<4096; i++) fYec16[i]=0; fYec16_idx = 0; fYec16_idx_save = 0; for (int i=0; i<4; i++) fRec50_perm[i]=0; for (int i=0; i<4; i++) fRec53_perm[i]=0; for (int i=0; i<4096; i++) fYec17[i]=0; fYec17_idx = 0; fYec17_idx_save = 0; for (int i=0; i<4; i++) fRec52_perm[i]=0; for (int i=0; i<4; i++) fRec55_perm[i]=0; for (int i=0; i<4096; i++) fYec18[i]=0; fYec18_idx = 0; fYec18_idx_save = 0; for (int i=0; i<4; i++) fRec54_perm[i]=0; for (int i=0; i<4; i++) fRec57_perm[i]=0; for (int i=0; i<4096; i++) fYec19[i]=0; fYec19_idx = 0; fYec19_idx_save = 0; for (int i=0; i<4; i++) fRec56_perm[i]=0; for (int i=0; i<2048; i++) fYec20[i]=0; fYec20_idx = 0; fYec20_idx_save = 0; for (int i=0; i<4; i++) fRec40_perm[i]=0; for (int i=0; i<2048; i++) fYec21[i]=0; fYec21_idx = 0; fYec21_idx_save = 0; for (int i=0; i<4; i++) fRec38_perm[i]=0; for (int i=0; i<2048; i++) fYec22[i]=0; fYec22_idx = 0; fYec22_idx_save = 0; for (int i=0; i<4; i++) fRec36_perm[i]=0; for (int i=0; i<2048; i++) fYec23[i]=0; fYec23_idx = 0; fYec23_idx_save = 0; for (int i=0; i<4; i++) fRec34_perm[i]=0; for (int i=0; i<4096; i++) fYec24[i]=0; fYec24_idx = 0; fYec24_idx_save = 0; for (int i=0; i<4; i++) fRec8_perm[i]=0; for (int i=0; i<4; i++) fRec59_perm[i]=0; for (int i=0; i<4096; i++) fYec25[i]=0; fYec25_idx = 0; fYec25_idx_save = 0; for (int i=0; i<4; i++) fRec58_perm[i]=0; for (int i=0; i<4; i++) fRec61_perm[i]=0; for (int i=0; i<4096; i++) fYec26[i]=0; fYec26_idx = 0; fYec26_idx_save = 0; for (int i=0; i<4; i++) fRec60_perm[i]=0; for (int i=0; i<4; i++) fRec63_perm[i]=0; for (int i=0; i<4096; i++) fYec27[i]=0; fYec27_idx = 0; fYec27_idx_save = 0; for (int i=0; i<4; i++) fRec62_perm[i]=0; for (int i=0; i<4; i++) fRec65_perm[i]=0; for (int i=0; i<4096; i++) fYec28[i]=0; fYec28_idx = 0; fYec28_idx_save = 0; for (int i=0; i<4; i++) fRec64_perm[i]=0; for (int i=0; i<4; i++) fRec67_perm[i]=0; for (int i=0; i<4096; i++) fYec29[i]=0; fYec29_idx = 0; fYec29_idx_save = 0; for (int i=0; i<4; i++) fRec66_perm[i]=0; for (int i=0; i<4; i++) fRec69_perm[i]=0; for (int i=0; i<4096; i++) fYec30[i]=0; fYec30_idx = 0; fYec30_idx_save = 0; for (int i=0; i<4; i++) fRec68_perm[i]=0; for (int i=0; i<4; i++) fRec71_perm[i]=0; for (int i=0; i<4096; i++) fYec31[i]=0; fYec31_idx = 0; fYec31_idx_save = 0; for (int i=0; i<4; i++) fRec70_perm[i]=0; for (int i=0; i<2048; i++) fYec32[i]=0; fYec32_idx = 0; fYec32_idx_save = 0; for (int i=0; i<4; i++) fRec6_perm[i]=0; for (int i=0; i<2048; i++) fYec33[i]=0; fYec33_idx = 0; fYec33_idx_save = 0; for (int i=0; i<4; i++) fRec4_perm[i]=0; for (int i=0; i<2048; i++) fYec34[i]=0; fYec34_idx = 0; fYec34_idx_save = 0; for (int i=0; i<4; i++) fRec2_perm[i]=0; for (int i=0; i<2048; i++) fYec35[i]=0; fYec35_idx = 0; fYec35_idx_save = 0; for (int i=0; i<4; i++) fRec0_perm[i]=0; for (int i=0; i<4; i++) fRec81_perm[i]=0; for (int i=0; i<4096; i++) fYec36[i]=0; fYec36_idx = 0; fYec36_idx_save = 0; for (int i=0; i<4; i++) fRec80_perm[i]=0; for (int i=0; i<4; i++) fRec83_perm[i]=0; for (int i=0; i<4096; i++) fYec37[i]=0; fYec37_idx = 0; fYec37_idx_save = 0; for (int i=0; i<4; i++) fRec82_perm[i]=0; for (int i=0; i<4; i++) fRec85_perm[i]=0; for (int i=0; i<4096; i++) fYec38[i]=0; fYec38_idx = 0; fYec38_idx_save = 0; for (int i=0; i<4; i++) fRec84_perm[i]=0; for (int i=0; i<4; i++) fRec87_perm[i]=0; for (int i=0; i<4096; i++) fYec39[i]=0; fYec39_idx = 0; fYec39_idx_save = 0; for (int i=0; i<4; i++) fRec86_perm[i]=0; for (int i=0; i<4; i++) fRec89_perm[i]=0; for (int i=0; i<4096; i++) fYec40[i]=0; fYec40_idx = 0; fYec40_idx_save = 0; for (int i=0; i<4; i++) fRec88_perm[i]=0; for (int i=0; i<4; i++) fRec91_perm[i]=0; for (int i=0; i<4096; i++) fYec41[i]=0; fYec41_idx = 0; fYec41_idx_save = 0; for (int i=0; i<4; i++) fRec90_perm[i]=0; for (int i=0; i<4; i++) fRec93_perm[i]=0; for (int i=0; i<4096; i++) fYec42[i]=0; fYec42_idx = 0; fYec42_idx_save = 0; for (int i=0; i<4; i++) fRec92_perm[i]=0; for (int i=0; i<4; i++) fRec95_perm[i]=0; for (int i=0; i<4096; i++) fYec43[i]=0; fYec43_idx = 0; fYec43_idx_save = 0; for (int i=0; i<4; i++) fRec94_perm[i]=0; for (int i=0; i<2048; i++) fYec44[i]=0; fYec44_idx = 0; fYec44_idx_save = 0; for (int i=0; i<4; i++) fRec78_perm[i]=0; for (int i=0; i<2048; i++) fYec45[i]=0; fYec45_idx = 0; fYec45_idx_save = 0; for (int i=0; i<4; i++) fRec76_perm[i]=0; for (int i=0; i<2048; i++) fYec46[i]=0; fYec46_idx = 0; fYec46_idx_save = 0; for (int i=0; i<4; i++) fRec74_perm[i]=0; for (int i=0; i<2048; i++) fYec47[i]=0; fYec47_idx = 0; fYec47_idx_save = 0; for (int i=0; i<4; i++) fRec72_perm[i]=0; } virtual void init(int samplingFreq) { classInit(samplingFreq); instanceInit(samplingFreq); } virtual void buildUserInterface(UI* interface) { interface->openVerticalBox("Freeverb"); interface->addHorizontalSlider("Damp", &fslider0, 0.5f, 0.0f, 1.0f, 2.500000e-02f); interface->addHorizontalSlider("RoomSize", &fslider1, 0.5f, 0.0f, 1.0f, 2.500000e-02f); interface->addHorizontalSlider("Wet", &fslider2, 0.3333f, 0.0f, 1.0f, 2.500000e-02f); interface->closeBox(); } virtual void compute (int fullcount, FAUSTFLOAT** input, FAUSTFLOAT** output) { float fRec9_tmp[1024+4]; float fRec19_tmp[1024+4]; float fZec0[1024]; float fRec18_tmp[1024+4]; float fRec21_tmp[1024+4]; float fRec20_tmp[1024+4]; float fRec23_tmp[1024+4]; float fRec22_tmp[1024+4]; float fRec25_tmp[1024+4]; float fRec24_tmp[1024+4]; float fRec27_tmp[1024+4]; float fRec26_tmp[1024+4]; float fRec29_tmp[1024+4]; float fRec28_tmp[1024+4]; float fRec31_tmp[1024+4]; float fRec30_tmp[1024+4]; float fRec33_tmp[1024+4]; float fRec32_tmp[1024+4]; float fZec1[1024]; float fRec16_tmp[1024+4]; float fRec17[1024]; float fRec14_tmp[1024+4]; float fRec15[1024]; float fRec12_tmp[1024+4]; float fRec13[1024]; float fRec10_tmp[1024+4]; float fRec11[1024]; float fZec2[1024]; float fRec43_tmp[1024+4]; float fRec42_tmp[1024+4]; float fRec45_tmp[1024+4]; float fRec44_tmp[1024+4]; float fRec47_tmp[1024+4]; float fRec46_tmp[1024+4]; float fRec49_tmp[1024+4]; float fRec48_tmp[1024+4]; float fRec51_tmp[1024+4]; float fRec50_tmp[1024+4]; float fRec53_tmp[1024+4]; float fRec52_tmp[1024+4]; float fRec55_tmp[1024+4]; float fRec54_tmp[1024+4]; float fRec57_tmp[1024+4]; float fRec56_tmp[1024+4]; float fZec3[1024]; float fRec40_tmp[1024+4]; float fRec41[1024]; float fRec38_tmp[1024+4]; float fRec39[1024]; float fRec36_tmp[1024+4]; float fRec37[1024]; float fRec34_tmp[1024+4]; float fRec35[1024]; float fZec4[1024]; float fZec5[1024]; float fRec8_tmp[1024+4]; float fRec59_tmp[1024+4]; float fRec58_tmp[1024+4]; float fRec61_tmp[1024+4]; float fRec60_tmp[1024+4]; float fRec63_tmp[1024+4]; float fRec62_tmp[1024+4]; float fRec65_tmp[1024+4]; float fRec64_tmp[1024+4]; float fRec67_tmp[1024+4]; float fRec66_tmp[1024+4]; float fRec69_tmp[1024+4]; float fRec68_tmp[1024+4]; float fRec71_tmp[1024+4]; float fRec70_tmp[1024+4]; float fZec6[1024]; float fRec6_tmp[1024+4]; float fRec7[1024]; float fRec4_tmp[1024+4]; float fRec5[1024]; float fRec2_tmp[1024+4]; float fRec3[1024]; float fRec0_tmp[1024+4]; float fRec1[1024]; float fRec81_tmp[1024+4]; float fRec80_tmp[1024+4]; float fRec83_tmp[1024+4]; float fRec82_tmp[1024+4]; float fRec85_tmp[1024+4]; float fRec84_tmp[1024+4]; float fRec87_tmp[1024+4]; float fRec86_tmp[1024+4]; float fRec89_tmp[1024+4]; float fRec88_tmp[1024+4]; float fRec91_tmp[1024+4]; float fRec90_tmp[1024+4]; float fRec93_tmp[1024+4]; float fRec92_tmp[1024+4]; float fRec95_tmp[1024+4]; float fRec94_tmp[1024+4]; float fZec7[1024]; float fRec78_tmp[1024+4]; float fRec79[1024]; float fRec76_tmp[1024+4]; float fRec77[1024]; float fRec74_tmp[1024+4]; float fRec75[1024]; float fRec72_tmp[1024+4]; float fRec73[1024]; float fSlow0 = (0.4f * fslider0); float fSlow1 = (1 - fSlow0); float* fRec9 = &fRec9_tmp[4]; float fSlow2 = (0.7f + (0.28f * fslider1)); float* fRec19 = &fRec19_tmp[4]; float* fRec18 = &fRec18_tmp[4]; float* fRec21 = &fRec21_tmp[4]; float* fRec20 = &fRec20_tmp[4]; float* fRec23 = &fRec23_tmp[4]; float* fRec22 = &fRec22_tmp[4]; float* fRec25 = &fRec25_tmp[4]; float* fRec24 = &fRec24_tmp[4]; float* fRec27 = &fRec27_tmp[4]; float* fRec26 = &fRec26_tmp[4]; float* fRec29 = &fRec29_tmp[4]; float* fRec28 = &fRec28_tmp[4]; float* fRec31 = &fRec31_tmp[4]; float* fRec30 = &fRec30_tmp[4]; float* fRec33 = &fRec33_tmp[4]; float* fRec32 = &fRec32_tmp[4]; float* fRec16 = &fRec16_tmp[4]; float* fRec14 = &fRec14_tmp[4]; float* fRec12 = &fRec12_tmp[4]; float* fRec10 = &fRec10_tmp[4]; float fSlow3 = fslider2; float fSlow4 = (1 - fSlow3); float* fRec43 = &fRec43_tmp[4]; float* fRec42 = &fRec42_tmp[4]; float* fRec45 = &fRec45_tmp[4]; float* fRec44 = &fRec44_tmp[4]; float* fRec47 = &fRec47_tmp[4]; float* fRec46 = &fRec46_tmp[4]; float* fRec49 = &fRec49_tmp[4]; float* fRec48 = &fRec48_tmp[4]; float* fRec51 = &fRec51_tmp[4]; float* fRec50 = &fRec50_tmp[4]; float* fRec53 = &fRec53_tmp[4]; float* fRec52 = &fRec52_tmp[4]; float* fRec55 = &fRec55_tmp[4]; float* fRec54 = &fRec54_tmp[4]; float* fRec57 = &fRec57_tmp[4]; float* fRec56 = &fRec56_tmp[4]; float* fRec40 = &fRec40_tmp[4]; float* fRec38 = &fRec38_tmp[4]; float* fRec36 = &fRec36_tmp[4]; float* fRec34 = &fRec34_tmp[4]; float* fRec8 = &fRec8_tmp[4]; float* fRec59 = &fRec59_tmp[4]; float* fRec58 = &fRec58_tmp[4]; float* fRec61 = &fRec61_tmp[4]; float* fRec60 = &fRec60_tmp[4]; float* fRec63 = &fRec63_tmp[4]; float* fRec62 = &fRec62_tmp[4]; float* fRec65 = &fRec65_tmp[4]; float* fRec64 = &fRec64_tmp[4]; float* fRec67 = &fRec67_tmp[4]; float* fRec66 = &fRec66_tmp[4]; float* fRec69 = &fRec69_tmp[4]; float* fRec68 = &fRec68_tmp[4]; float* fRec71 = &fRec71_tmp[4]; float* fRec70 = &fRec70_tmp[4]; float* fRec6 = &fRec6_tmp[4]; float* fRec4 = &fRec4_tmp[4]; float* fRec2 = &fRec2_tmp[4]; float* fRec0 = &fRec0_tmp[4]; float* fRec81 = &fRec81_tmp[4]; float* fRec80 = &fRec80_tmp[4]; float* fRec83 = &fRec83_tmp[4]; float* fRec82 = &fRec82_tmp[4]; float* fRec85 = &fRec85_tmp[4]; float* fRec84 = &fRec84_tmp[4]; float* fRec87 = &fRec87_tmp[4]; float* fRec86 = &fRec86_tmp[4]; float* fRec89 = &fRec89_tmp[4]; float* fRec88 = &fRec88_tmp[4]; float* fRec91 = &fRec91_tmp[4]; float* fRec90 = &fRec90_tmp[4]; float* fRec93 = &fRec93_tmp[4]; float* fRec92 = &fRec92_tmp[4]; float* fRec95 = &fRec95_tmp[4]; float* fRec94 = &fRec94_tmp[4]; float* fRec78 = &fRec78_tmp[4]; float* fRec76 = &fRec76_tmp[4]; float* fRec74 = &fRec74_tmp[4]; float* fRec72 = &fRec72_tmp[4]; int index; for (index = 0; index <= fullcount - 1024; index += 1024) { // compute by blocks of 1024 samples const int count = 1024; FAUSTFLOAT* input0 = &input[0][index]; FAUSTFLOAT* input1 = &input[1][index]; FAUSTFLOAT* output0 = &output[0][index]; FAUSTFLOAT* output1 = &output[1][index]; // SECTION : 1 // LOOP 0x101350bc0 // exec code for (int i=0; imSampleRate); printf(" Format ID:%.*s\n", (int) sizeof(inDesc->mFormatID), (char*)&inDesc->mFormatID); printf(" Format Flags:%lX\n", inDesc->mFormatFlags); printf(" Bytes per Packet:%ld\n", inDesc->mBytesPerPacket); printf(" Frames per Packet:%ld\n", inDesc->mFramesPerPacket); printf(" Bytes per Frame:%ld\n", inDesc->mBytesPerFrame); printf(" Channels per Frame:%ld\n", inDesc->mChannelsPerFrame); printf(" Bits per Channel:%ld\n", inDesc->mBitsPerChannel); printf("- - - - - - - - - - - - - - - - - - - -\n"); } static void printError(OSStatus err) { switch (err) { case kAudioConverterErr_FormatNotSupported: printf("error code : kAudioConverterErr_FormatNotSupported\n"); break; case kAudioConverterErr_OperationNotSupported: printf("error code : kAudioConverterErr_OperationNotSupported\n"); break; case kAudioConverterErr_PropertyNotSupported: printf("error code : kAudioConverterErr_PropertyNotSupported\n"); break; case kAudioConverterErr_InvalidInputSize: printf("error code : kAudioConverterErr_InvalidInputSize\n"); break; case kAudioConverterErr_InvalidOutputSize: printf("error code : kAudioConverterErr_InvalidOutputSize\n"); break; case kAudioConverterErr_UnspecifiedError: printf("error code : kAudioConverterErr_UnspecifiedError\n"); break; case kAudioConverterErr_BadPropertySizeError: printf("error code : kAudioConverterErr_BadPropertySizeError\n"); break; case kAudioConverterErr_RequiresPacketDescriptionsError: printf("error code : kAudioConverterErr_RequiresPacketDescriptionsError\n"); break; case kAudioConverterErr_InputSampleRateOutOfRange: printf("error code : kAudioConverterErr_InputSampleRateOutOfRange\n"); break; case kAudioConverterErr_OutputSampleRateOutOfRange: printf("error code : kAudioConverterErr_OutputSampleRateOutOfRange\n"); break; default: printf("error code : unknown\n"); break; } } st::HardwareClock my_clock; OSStatus TiPhoneCoreAudioRenderer::Render(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32, UInt32 inNumberFrames, AudioBufferList *ioData) { TiPhoneCoreAudioRendererPtr renderer = (TiPhoneCoreAudioRendererPtr)inRefCon; my_clock.Update(); //printf("TiPhoneCoreAudioRenderer::Render 0 %d\n", inNumberFrames); AudioUnitRender(renderer->fAUHAL, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData); float coef = 1.f/32768.f; /* for (int chan = 0; chan < fDevNumInChans; chan++) { for (int frame = 0; frame < inNumberFrames; frame++) { fInChannel[chan][frame] = float(((long*)ioData->mBuffers[chan].mData)[frame]) / 32768.f; fInChannel[chan][frame] = float(((long*)ioData->mBuffers[chan].mData)[frame]) / 32768.f; } } */ for (int frame = 0; frame < inNumberFrames; frame++) { float sample = float(((long*)ioData->mBuffers[0].mData)[frame]) * coef; renderer->fInChannel[0][frame] = sample; renderer->fInChannel[1][frame] = sample; } //printf("TiPhoneCoreAudioRenderer::Render 1 %d\n", inNumberFrames); DSP.compute((int)inNumberFrames, renderer->fInChannel, renderer->fOutChannel); for (int chan = 0; chan < renderer->fDevNumOutChans; chan++) { for (int frame = 0; frame < inNumberFrames; frame++) { ((long*)ioData->mBuffers[chan].mData)[frame] = long(renderer->fOutChannel[chan][frame] * 32768.f); } } my_clock.Update(); const float dt = my_clock.GetDeltaTime(); printf("Normal: %f s\n", dt); //printf("TiPhoneCoreAudioRenderer::Render 3 %d\n", inNumberFrames); return 0; } void TiPhoneCoreAudioRenderer::InterruptionListener(void *inClientData, UInt32 inInterruption) { printf("Session interrupted! --- %s ---", inInterruption == kAudioSessionBeginInterruption ? "Begin Interruption" : "End Interruption"); TiPhoneCoreAudioRenderer *obj = (TiPhoneCoreAudioRenderer*)inClientData; if (inInterruption == kAudioSessionEndInterruption) { // make sure we are again the active session AudioSessionSetActive(true); AudioOutputUnitStart(obj->fAUHAL); } if (inInterruption == kAudioSessionBeginInterruption) { AudioOutputUnitStop(obj->fAUHAL); } } long TiPhoneCoreAudioRenderer::Open(long bufferSize, long samplerate) { OSStatus err1; UInt32 outSize; UInt32 enableIO; Boolean isWritable; AudioStreamBasicDescription srcFormat, dstFormat; printf("Open fDevNumInChans = %ld fDevNumOutChans = %ld bufferSize = %ld samplerate = %ld\n", fDevNumInChans, fDevNumOutChans, bufferSize, samplerate); // Initialize and configure the audio session err1 = AudioSessionInitialize(NULL, NULL, InterruptionListener, this); if (err1 != noErr) { printf("Couldn't initialize audio session\n"); printError(err1); return OPEN_ERR; } err1 = AudioSessionSetActive(true); if (err1 != noErr) { printf("Couldn't set audio session active\n"); printError(err1); return OPEN_ERR; } UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; err1 = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory); if (err1 != noErr) { printf("Couldn't set audio category\n"); printError(err1); return OPEN_ERR; } //err1 = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, propListener, self), "couldn't set property listener"); Float64 hwSampleRate; outSize = sizeof(hwSampleRate); err1 = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareSampleRate, &outSize, &hwSampleRate); if (err1 != noErr) { printf("Couldn't get hw sample rate\n"); printError(err1); return OPEN_ERR; } else { printf("Get hw sample rate %f\n", hwSampleRate); } Float32 hwBufferSize; outSize = sizeof(hwBufferSize); err1 = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareIOBufferDuration, &outSize, &hwBufferSize); if (err1 != noErr) { printf("Couldn't get hw buffer duration\n"); printError(err1); return OPEN_ERR; } else { printf("Get hw buffer duration %f\n", hwBufferSize); } UInt32 hwInput; outSize = sizeof(hwInput); err1 = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareInputNumberChannels, &outSize, &hwInput); if (err1 != noErr) { printf("Couldn't get hw input channels\n"); printError(err1); return OPEN_ERR; } else { printf("Get hw input channels %d\n", hwInput); } UInt32 hwOutput; outSize = sizeof(hwOutput); err1 = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareOutputNumberChannels, &outSize, &hwOutput); if (err1 != noErr) { printf("Couldn't get hw output channels\n"); printError(err1); return OPEN_ERR; } else { printf("Get hw output channels %d\n", hwOutput); } Float32 preferredBufferSize = float(bufferSize) / float(samplerate); printf("preferredBufferSize %f \n", preferredBufferSize); err1 = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize); if (err1 != noErr) { printf("Couldn't set i/o buffer duration\n"); printError(err1); return OPEN_ERR; } Float64 preferredSamplerate = float(samplerate); err1 = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareSampleRate, sizeof(preferredSamplerate), &preferredSamplerate); if (err1 != noErr) { printf("Couldn't set i/o sample rate\n"); printError(err1); return OPEN_ERR; } // AUHAL AudioComponentDescription cd = {kAudioUnitType_Output, kAudioUnitSubType_RemoteIO, kAudioUnitManufacturer_Apple, 0, 0}; AudioComponent HALOutput = AudioComponentFindNext(NULL, &cd); err1 = AudioComponentInstanceNew(HALOutput, &fAUHAL); if (err1 != noErr) { printf("Error calling OpenAComponent\n"); printError(err1); goto error; } enableIO = 1; err1 = AudioUnitSetProperty(fAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, 0, &enableIO, sizeof(enableIO)); if (err1 != noErr) { printf("Error calling AudioUnitSetProperty - kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output\n"); printError(err1); goto error; } enableIO = 1; err1 = AudioUnitSetProperty(fAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, 1, &enableIO, sizeof(enableIO)); if (err1 != noErr) { printf("Error calling AudioUnitSetProperty - kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input\n"); printError(err1); goto error; } UInt32 maxFPS; outSize = sizeof(maxFPS); err1 = AudioUnitGetProperty(fAUHAL, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, &maxFPS, &outSize); if (err1 != noErr) { printf("Couldn't get kAudioUnitProperty_MaximumFramesPerSlice\n"); printError(err1); goto error; } else { printf("Get kAudioUnitProperty_MaximumFramesPerSlice %d\n", maxFPS); } err1 = AudioUnitSetProperty(fAUHAL, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 1, (UInt32*)&bufferSize, sizeof(UInt32)); if (err1 != noErr) { printf("Error calling AudioUnitSetProperty - kAudioUnitProperty_MaximumFramesPerSlice\n"); printError(err1); goto error; } err1 = AudioUnitSetProperty(fAUHAL, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, (UInt32*)&bufferSize, sizeof(UInt32)); if (err1 != noErr) { printf("Error calling AudioUnitSetProperty - kAudioUnitProperty_MaximumFramesPerSlice\n"); printError(err1); goto error; } err1 = AudioUnitInitialize(fAUHAL); if (err1 != noErr) { printf("Cannot initialize AUHAL unit\n"); printError(err1); goto error; } // Setting format if (fDevNumInChans > 0) { outSize = sizeof(AudioStreamBasicDescription); err1 = AudioUnitGetProperty(fAUHAL, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 1, &srcFormat, &outSize); if (err1 != noErr) { printf("Error calling AudioUnitGetProperty - kAudioUnitProperty_StreamFormat kAudioUnitScope_Output\n"); printError(err1); } PrintStreamDesc(&srcFormat); srcFormat.mFormatID = kAudioFormatLinearPCM; srcFormat.mFormatFlags = kAudioFormatFlagsCanonical | kLinearPCMFormatFlagIsNonInterleaved; srcFormat.mBytesPerPacket = sizeof(AudioUnitSampleType); srcFormat.mFramesPerPacket = 1; srcFormat.mBytesPerFrame = sizeof(AudioUnitSampleType); srcFormat.mChannelsPerFrame = fDevNumInChans; srcFormat.mBitsPerChannel = 32; PrintStreamDesc(&srcFormat); err1 = AudioUnitSetProperty(fAUHAL, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 1, &srcFormat, sizeof(AudioStreamBasicDescription)); if (err1 != noErr) { printf("Error calling AudioUnitSetProperty - kAudioUnitProperty_StreamFormat kAudioUnitScope_Output\n"); printError(err1); } } if (fDevNumOutChans > 0) { outSize = sizeof(AudioStreamBasicDescription); err1 = AudioUnitGetProperty(fAUHAL, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &dstFormat, &outSize); if (err1 != noErr) { printf("Error calling AudioUnitGetProperty - kAudioUnitProperty_StreamFormat kAudioUnitScope_Input\n"); printError(err1); } PrintStreamDesc(&dstFormat); dstFormat.mFormatID = kAudioFormatLinearPCM; dstFormat.mFormatFlags = kAudioFormatFlagsCanonical | kLinearPCMFormatFlagIsNonInterleaved; dstFormat.mBytesPerPacket = sizeof(AudioUnitSampleType); dstFormat.mFramesPerPacket = 1; dstFormat.mBytesPerFrame = sizeof(AudioUnitSampleType); dstFormat.mChannelsPerFrame = fDevNumOutChans; dstFormat.mBitsPerChannel = 32; PrintStreamDesc(&dstFormat); err1 = AudioUnitSetProperty(fAUHAL, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &dstFormat, sizeof(AudioStreamBasicDescription)); if (err1 != noErr) { printf("Error calling AudioUnitSetProperty - kAudioUnitProperty_StreamFormat kAudioUnitScope_Input\n"); printError(err1); } } if (fDevNumInChans > 0 && fDevNumOutChans == 0) { AURenderCallbackStruct output; output.inputProc = Render; output.inputProcRefCon = this; err1 = AudioUnitSetProperty(fAUHAL, kAudioOutputUnitProperty_SetInputCallback, kAudioUnitScope_Global, 0, &output, sizeof(output)); if (err1 != noErr) { printf("Error calling AudioUnitSetProperty - kAudioUnitProperty_SetRenderCallback 1\n"); printError(err1); goto error; } } else { AURenderCallbackStruct output; output.inputProc = Render; output.inputProcRefCon = this; err1 = AudioUnitSetProperty(fAUHAL, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, &output, sizeof(output)); if (err1 != noErr) { printf("Error calling AudioUnitSetProperty - kAudioUnitProperty_SetRenderCallback 0\n"); printError(err1); goto error; } } return NO_ERR; error: AudioUnitUninitialize(fAUHAL); AudioComponentInstanceDispose(fAUHAL); return OPEN_ERR; } long TiPhoneCoreAudioRenderer::Close() { AudioUnitUninitialize(fAUHAL); AudioComponentInstanceDispose(fAUHAL); return NO_ERR; } long TiPhoneCoreAudioRenderer::Start() { AudioSessionSetActive(true); OSStatus err = AudioOutputUnitStart(fAUHAL); if (err != noErr) { printf("Error while opening device : device open error \n"); return OPEN_ERR; } else { return NO_ERR; } } long TiPhoneCoreAudioRenderer::Stop() { OSStatus err = AudioOutputUnitStop(fAUHAL); if (err != noErr) { printf("Error while closing device : device close error \n"); return OPEN_ERR; } else { return NO_ERR; } } /****************************************************************************** ******************************************************************************* MAIN PLAY THREAD ******************************************************************************* *******************************************************************************/ long lopt(char *argv[], const char *name, long def) { int i; for (i = 0; argv[i]; i++) if (!strcmp(argv[i], name)) return atoi(argv[i + 1]); return def; } //------------------------------------------------------------------------- // MAIN //------------------------------------------------------------------------- int main(int argc, char *argv[]) { UI* interface = new CMDUI(argc, argv); TiPhoneCoreAudioRenderer audio_device(DSP.getNumInputs(), DSP.getNumOutputs()); long srate = (long)lopt(argv, "--frequency", 44100); int fpb = lopt(argv, "--buffer", 512); DSP.init(long(srate)); DSP.buildUserInterface(interface); if (audio_device.Open(fpb, srate) < 0) { printf("Cannot open CoreAudio device\n"); return 0; } if (audio_device.Start() < 0) { printf("Cannot start CoreAudio device\n"); return 0; } printf("inchan = %d, outchan = %d, freq = %ld\n", DSP.getNumInputs(), DSP.getNumOutputs(), srate); interface->run(); audio_device.Stop(); audio_device.Close(); return 0; }