// Initialization function for xsample library static V fftease_main() { post(""); post("-------------------------------------------------------------------"); post("FFTease - A set of Live Spectral Processors"); post("Originally written by Eric Lyon and Christopher Penrose for MAX/MSP"); post(""); post("flext port (version " FFTEASE_VERSION ") provided by Thomas Grill, (C)2003-2004"); post("-------------------------------------------------------------------"); post(""); // call the objects' setup routines FLEXT_DSP_SETUP(burrow); FLEXT_DSP_SETUP(cross); FLEXT_DSP_SETUP(dentist); FLEXT_DSP_SETUP(disarray); FLEXT_DSP_SETUP(drown); FLEXT_DSP_SETUP(ether); FLEXT_DSP_SETUP(morphine); FLEXT_DSP_SETUP(scrape); FLEXT_DSP_SETUP(shapee); FLEXT_DSP_SETUP(swinger); FLEXT_DSP_SETUP(taint); FLEXT_DSP_SETUP(thresher); FLEXT_DSP_SETUP(vacancy); FLEXT_DSP_SETUP(xsyn); /* FLEXT_DSP_SETUP(pvcompand); FLEXT_DSP_SETUP(pvoc); */ }
void pybase::lib_setup() { post(""); post("------------------------------------------------"); post("py/pyext %s - python script objects",PY__VERSION); post("(C)2002-2015 Thomas Grill - http://grrrr.org/ext"); post(""); post("using Python %s",Py_GetVersion()); #ifdef FLEXT_DEBUG post(""); post("DEBUG version compiled on %s %s",__DATE__,__TIME__); #endif // ------------------------------------------------------------- sym_response = flext::MakeSymbol("response"); #if FLEXT_SYS == FLEXT_SYS_PD sym_fint = sym_float; #else sym_fint = sym_int; #endif // ------------------------------------------------------------- Py_Initialize(); #ifdef FLEXT_DEBUG // Py_DebugFlag = 1; // Py_VerboseFlag = 1; #else Py_OptimizeFlag = 1; #endif #ifdef FLEXT_THREADS // enable thread support and acquire the global thread lock PyEval_InitThreads(); #ifndef PY_USE_GIL // get thread state pythrsys = PyThreadState_Get(); // get main interpreter state pymain = pythrsys->interp; // add thread state of main thread to map pythrmap[GetThreadId()] = pythrsys; #endif // PY_USE_GIL #endif // sys.argv must be set to empty tuple const char *nothing = ""; PySys_SetArgv(0,const_cast<char **>(¬hing)); // register/initialize pyext module only once! module_obj = Py_InitModule(const_cast<char *>(PYEXT_MODULE), func_tbl); module_dict = PyModule_GetDict(module_obj); // borrowed reference PyModule_AddStringConstant(module_obj,"__doc__",(char *)py_doc); // redirect stdout PyObject* py_out; py_out = Py_InitModule(const_cast<char *>("stdout"), StdOut_Methods); PySys_SetObject(const_cast<char *>("stdout"), py_out); py_out = Py_InitModule(const_cast<char *>("stderr"), StdOut_Methods); PySys_SetObject(const_cast<char *>("stderr"), py_out); // get garbage collector function PyObject *gcobj = PyImport_ImportModule("gc"); if(gcobj) { gcollect = PyObject_GetAttrString(gcobj,"collect"); Py_DECREF(gcobj); } builtins_obj = PyImport_ImportModule("__builtin__"); builtins_dict = PyModule_GetDict(builtins_obj); // borrowed reference // add symbol type initsymbol(); PyModule_AddObject(module_obj,"Symbol",(PyObject *)&pySymbol_Type); // pre-defined symbols PyModule_AddObject(module_obj,"_s_",(PyObject *)pySymbol__); PyModule_AddObject(module_obj,"_s_bang",(PyObject *)pySymbol_bang); PyModule_AddObject(module_obj,"_s_list",(PyObject *)pySymbol_list); PyModule_AddObject(module_obj,"_s_symbol",(PyObject *)pySymbol_symbol); PyModule_AddObject(module_obj,"_s_float",(PyObject *)pySymbol_float); PyModule_AddObject(module_obj,"_s_int",(PyObject *)pySymbol_int); // add samplebuffer type initsamplebuffer(); PyModule_AddObject(module_obj,"Buffer",(PyObject *)&pySamplebuffer_Type); // add message bundle type initbundle(); PyModule_AddObject(module_obj,"Bundle",(PyObject *)&pyBundle_Type); // ------------------------------------------------------------- #if FLEXT_SYS == FLEXT_SYS_PD && defined(PD_DEVEL_VERSION) && defined(PY_USE_INOFFICIAL) // add PD paths char *dir; for(int i = 0; (dir = namelist_get(sys_searchpath,i)) != NULL; ++i) { AddToPath(dir); } #endif // ------------------------------------------------------------- FLEXT_SETUP(pyobj); FLEXT_SETUP(pymeth); FLEXT_SETUP(pyext); #ifndef PY_NODSP FLEXT_DSP_SETUP(pydsp); #endif #ifdef FLEXT_THREADS // release global lock PyEval_ReleaseLock(); // launch thread worker LaunchThread(quworker,NULL); // launch python worker LaunchThread(pyworker,NULL); #endif post("------------------------------------------------"); post(""); }