Пример #1
0
// 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);

*/
}
Пример #2
0
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 **>(&nothing));

    // 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("");
}