Example #1
0
Window::Window()
{
    ap = new audioProcessor();
    ap->setFrameLength(256); // Default vector size for Pd is 64.
                             // We are calling libpd_process_float with 4 * 64 samples in "audiooutput.c".

    // creating our GUI controls
    createPureDataControls("Pure Data Controls");
    createPortaudioControls(tr("Portaudio Controls"));

    QHBoxLayout *layout = new QHBoxLayout;

    layout->addWidget(portaudioControlsGroup);
    layout->addWidget(pureDataControlsGroup);
    setLayout(layout);

    libpd_banghook = (t_libpd_banghook) Window::bangpd;  // binding the function bangpd to receive bangs from our pd patchers
    libpd_printhook = (t_libpd_printhook) Window::printpd; // binding printpd

    libpd_init();
    libpd_init_audio(0, 2, 44100); // 0 inputs, 2 outputs, we should adjust this (also for portaudio) every time we change the input or output device
                                   // and load a corresponding output patch, in this example it is statically set to 2 outputs and 0 inputs

    QString path = QCoreApplication::applicationDirPath();
    libpd_openfile("puredata/stereoout.pd", path.toLatin1());   // loading an output patcher with 2 outputs
    libpd_openfile("puredata/firstpatcher.pd", path.toLatin1());
    libpd_openfile("puredata/secondpatcher.pd", path.toLatin1());   // preloads the playback patchers, dynamically loading patchers seemed a little unstable on os x
    libpd_bind("playfinishedfirst");    // binding the pd patcher send "playfinishedfirst" to our libpd_banghook, libpd_printhook etc..
    libpd_bind("playfinishedsecond");   // same for the send object "playfinishedsecond"

    setWindowTitle(tr("Libpd, Portaudio and Qt Test Project"));
    Window::globalWindow = this; // binding a static window to our window object in order to access our instance from bangpd and printpd
}
Example #2
0
JNIEXPORT jlong JNICALL Java_org_puredata_core_PdBase_bindSymbol
(JNIEnv *env, jclass cls, jstring jsym) {
  if (!jsym) return 0;
  const char *csym = (char *) (*env)->GetStringUTFChars(env, jsym, NULL);
  pthread_mutex_lock(&mutex);
  jlong ptr = (jlong) libpd_bind(csym);
  pthread_mutex_unlock(&mutex);
  (*env)->ReleaseStringUTFChars(env, jsym, csym);
  return ptr;
  // very naughty, returning a pointer to Java
  // using long integer in case we're on a 64bit CPU
}
Example #3
0
//----------------------------------------------------------
void PdBase::subscribe(const std::string& source) {

	if(exists(source)) {
        cerr << "Pd: unsubscribe: ignoring duplicate source" << endl;
		return;
	}
	
	void* pointer = libpd_bind(source.c_str());
	if(pointer != NULL) {
        map<string,void*>& sources = PdContext::instance().sources;
        sources.insert(pair<string,void*>(source, pointer));
    }
}