//----------------------------------------------------- // name: "freeverb" // version: "1.0" // author: "Grame" // license: "BSD" // copyright: "(c)GRAME 2006" // // Code generated with Faust 0.9.9.5b2 (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 "JackAudioQueueAdapter.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; } }; #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 min, float max) { string fullname = fPrefix.top() + label; fKeyParam.insert(make_pair(fullname, param(zone, min, max))); } 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,min,max); } virtual void addHorizontalSlider(const char* label, float* zone, float init, float min, float max, float step) { addOption(label,zone,min,max); } virtual void addNumEntry(const char* label, float* zone, float init, float min, float max, float step) { addOption(label,zone,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++; } } } }; //---------------------------------------------------------------- // Signal processor definition //---------------------------------------------------------------- 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; virtual void conclude() {} }; //---------------------------------------------------------------------------- // FAUST generated code //---------------------------------------------------------------------------- class mydsp : public dsp { private: float fslider0; float fRec9[2]; float fslider1; int IOTA; float fVec0[2048]; float fRec8[2]; float fRec11[2]; float fVec1[2048]; float fRec10[2]; float fRec13[2]; float fVec2[2048]; float fRec12[2]; float fRec15[2]; float fVec3[2048]; float fRec14[2]; float fRec17[2]; float fVec4[2048]; float fRec16[2]; float fRec19[2]; float fVec5[2048]; float fRec18[2]; float fRec21[2]; float fVec6[2048]; float fRec20[2]; float fRec23[2]; float fVec7[2048]; float fRec22[2]; float fVec8[1024]; float fRec6[2]; float fVec9[512]; float fRec4[2]; float fVec10[512]; float fRec2[2]; float fVec11[256]; float fRec0[2]; float fslider2; float fRec33[2]; float fVec12[2048]; float fRec32[2]; float fRec35[2]; float fVec13[2048]; float fRec34[2]; float fRec37[2]; float fVec14[2048]; float fRec36[2]; float fRec39[2]; float fVec15[2048]; float fRec38[2]; float fRec41[2]; float fVec16[2048]; float fRec40[2]; float fRec43[2]; float fVec17[2048]; float fRec42[2]; float fRec45[2]; float fVec18[2048]; float fRec44[2]; float fRec47[2]; float fVec19[2048]; float fRec46[2]; float fVec20[1024]; float fRec30[2]; float fVec21[512]; float fRec28[2]; float fVec22[512]; float fRec26[2]; float fVec23[256]; float fRec24[2]; 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<2; i++) fRec9[i] = 0; fslider1 = 0.8f; IOTA = 0; for (int i=0; i<2048; i++) fVec0[i] = 0; for (int i=0; i<2; i++) fRec8[i] = 0; for (int i=0; i<2; i++) fRec11[i] = 0; for (int i=0; i<2048; i++) fVec1[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<2048; i++) fVec2[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<2048; i++) fVec3[i] = 0; for (int i=0; i<2; i++) fRec14[i] = 0; for (int i=0; i<2; i++) fRec17[i] = 0; for (int i=0; i<2048; i++) fVec4[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<2048; i++) fVec5[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<2048; i++) fVec6[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<2048; i++) fVec7[i] = 0; for (int i=0; i<2; i++) fRec22[i] = 0; for (int i=0; i<1024; i++) fVec8[i] = 0; for (int i=0; i<2; i++) fRec6[i] = 0; for (int i=0; i<512; i++) fVec9[i] = 0; for (int i=0; i<2; i++) fRec4[i] = 0; for (int i=0; i<512; i++) fVec10[i] = 0; for (int i=0; i<2; i++) fRec2[i] = 0; for (int i=0; i<256; i++) fVec11[i] = 0; for (int i=0; i<2; i++) fRec0[i] = 0; fslider2 = 0.8f; for (int i=0; i<2; i++) fRec33[i] = 0; for (int i=0; i<2048; i++) fVec12[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<2048; i++) fVec13[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<2048; i++) fVec14[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<2048; i++) fVec15[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<2048; i++) fVec16[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<2048; i++) fVec17[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<2048; i++) fVec18[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<2048; i++) fVec19[i] = 0; for (int i=0; i<2; i++) fRec46[i] = 0; for (int i=0; i<1024; i++) fVec20[i] = 0; for (int i=0; i<2; i++) fRec30[i] = 0; for (int i=0; i<512; i++) fVec21[i] = 0; for (int i=0; i<2; i++) fRec28[i] = 0; for (int i=0; i<512; i++) fVec22[i] = 0; for (int i=0; i<2; i++) fRec26[i] = 0; for (int i=0; i<256; i++) fVec23[i] = 0; for (int i=0; i<2; i++) fRec24[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.8f, 0.0f, 1.0f, 2.500000e-02f); interface->addHorizontalSlider("Wet", &fslider2, 0.8f, 0.0f, 1.0f, 2.500000e-02f); interface->closeBox(); } virtual void compute (int count, float** input, float** output) { float fSlow0 = (0.4f * fslider0); float fSlow1 = (1 - fSlow0); float fSlow2 = (0.7f + (0.28f * fslider1)); float fSlow3 = fslider2; float fSlow4 = (1 - fSlow3); float* input0 = input[0]; float* input1 = input[1]; float* output0 = output[0]; float* output1 = output[1]; for (int i=0; ihi) hi = m; tot += m; } cout << low << ' ' << tot/(mesure-KSKIP) << ' ' << hi << endl; } else { for (int i = KSKIP+1; ihi) hi = m; tot += m; } cout << low << ' ' << tot/(KMESURE-KSKIP) << ' ' << hi << endl; } } #else #define STARTMESURE #define STOPMESURE #endif static int net_process(jack_nframes_t buffer_size, int audio_input, float** audio_input_buffer, int midi_input, void** midi_input_buffer, int audio_output, float** audio_output_buffer, int midi_output, void** midi_output_buffer, void* data) { AVOIDDENORMALS; STARTMESURE DSP.compute(buffer_size, audio_input_buffer, audio_output_buffer); STOPMESURE return 0; } /****************************************************************************** ******************************************************************************* MAIN PLAY THREAD ******************************************************************************* *******************************************************************************/ //------------------------------------------------------------------------- // MAIN //------------------------------------------------------------------------- #define TEST_MASTER "194.5.49.5" int main(int argc, char *argv[]) { UI* interface = new CMDUI(argc, argv); jack_net_slave_t* net; NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; //Jack::JackAudioQueueAdapter audio(2, 2, 1024, 44100, NULL); gNumInChans = DSP.getNumInputs(); gNumOutChans = DSP.getNumOutputs(); jack_slave_t request = { gNumInChans, gNumOutChans, 0, 0, DEFAULT_MTU, -1, 2 }; jack_master_t result; printf("Network\n"); //if (audio.Open() < 0) { // fprintf(stderr, "Cannot open audio\n"); // return 1; //} //audio.Start(); // Hang around forever... //while(1) CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.25, false); if ((net = jack_net_slave_open(TEST_MASTER, DEFAULT_PORT, "iPhone", &request, &result)) == 0) { fprintf(stderr, "jack remote server not running ?\n"); return 1; } jack_set_net_slave_process_callback(net, net_process, NULL); // We want to restart (that is "wait for available master" again) //jack_set_net_shutdown_callback(net, net_shutdown, 0); DSP.init(result.sample_rate); DSP.buildUserInterface(interface); if (jack_net_slave_activate(net) != 0) { fprintf(stderr, "cannot activate net"); return 1; } int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; // Wait for application end jack_net_slave_deactivate(net); jack_net_slave_close(net); //if (audio.Close() < 0) { // fprintf(stderr, "Cannot close audio\n"); //} return retVal; }