Beispiel #1
0
bool PdBase::writeArray(const std::string& arrayName, std::vector<float>& source, int writeLen, int offset) {

	int arrayLen = libpd_arraysize(arrayName.c_str());
	if(arrayLen < 0) {
		cerr << "Pd: Cannot write to unknown array \"" << arrayName << "\"" << endl;
		return false;
	}
	
	// full array len?
	if(writeLen < 0) {
		writeLen = arrayLen;
	}
	// check write len
	else if(writeLen > arrayLen) {
		cerr << "Pd: Given write len " << writeLen << " > len " << arrayLen
             << " of array \"" << arrayName << "\"" << endl;
		return false;
	}
	
	// check offset
	if(offset+writeLen > arrayLen) {
		cerr << "Pd: Given write len and offset > len " << writeLen
             << " of array \"" << arrayName << "\"" << endl;
		return false;
	}
	
	if(libpd_write_array(arrayName.c_str(), offset, &source[0], writeLen) < 0) {
		cerr << "Pd: libpd_write_array failed for array \"" << arrayName << "\"" << endl;
		return false;
	}
	return true;
}
Beispiel #2
0
JNIEXPORT jint JNICALL Java_org_puredata_core_PdBase_writeArrayNative
(JNIEnv *env, jclass cls, jstring jdest, jint destOffset,
jfloatArray jsrc, jint srcOffset, jint n) {
  if (!jdest || !jsrc) return -3;
  float *psrc = (*env)->GetFloatArrayElements(env, jsrc, NULL);
  const char *cdest = (char *) (*env)->GetStringUTFChars(env, jdest, NULL);
  pthread_mutex_lock(&mutex);
  int result = libpd_write_array(cdest, destOffset, psrc + srcOffset, n);
  pthread_mutex_unlock(&mutex);
  (*env)->ReleaseStringUTFChars(env, jdest, cdest);
  (*env)->ReleaseFloatArrayElements(env, jsrc, psrc, 0);
  return result;
}
Beispiel #3
0
void PdBase::clearArray(const std::string& arrayName, int value) {

	int arrayLen = libpd_arraysize(arrayName.c_str());
	if(arrayLen < 0) {
		cerr << "Pd: Cannot clear unknown array \"" << arrayName << "\"" << endl;
		return;
	}
	
	std::vector<float> array;
	array.resize(arrayLen, value);
	
	if(libpd_write_array(arrayName.c_str(), 0, &array[0], arrayLen) < 0) {
		cerr << "Pd: libpd_write_array failed while clearing array \""
             << arrayName << "\"" << endl;
	}
}