static jint android_media_AudioEffect_native_setParameter(JNIEnv *env, jobject thiz, int psize, jbyteArray pJavaParam, int vsize, jbyteArray pJavaValue) { // retrieve the AudioEffect object jbyte* lpValue = NULL; jbyte* lpParam = NULL; jint lStatus = AUDIOEFFECT_ERROR_BAD_VALUE; effect_param_t *p; int voffset; AudioEffect* lpAudioEffect = (AudioEffect *) env->GetIntField(thiz, fields.fidNativeAudioEffect); if (lpAudioEffect == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve AudioEffect pointer for setParameter()"); return AUDIOEFFECT_ERROR_NO_INIT; } if (psize == 0 || vsize == 0 || pJavaParam == NULL || pJavaValue == NULL) { return AUDIOEFFECT_ERROR_BAD_VALUE; } // get the pointer for the param from the java array lpParam = (jbyte *) env->GetPrimitiveArrayCritical(pJavaParam, NULL); if (lpParam == NULL) { LOGE("setParameter: Error retrieving param pointer"); goto setParameter_Exit; } // get the pointer for the value from the java array lpValue = (jbyte *) env->GetPrimitiveArrayCritical(pJavaValue, NULL); if (lpValue == NULL) { LOGE("setParameter: Error retrieving value pointer"); goto setParameter_Exit; } voffset = ((psize - 1) / sizeof(int) + 1) * sizeof(int); p = (effect_param_t *) malloc(sizeof(effect_param_t) + voffset + vsize); memcpy(p->data, lpParam, psize); p->psize = psize; memcpy(p->data + voffset, lpValue, vsize); p->vsize = vsize; lStatus = lpAudioEffect->setParameter(p); if (lStatus == NO_ERROR) { lStatus = p->status; } free(p); setParameter_Exit: if (lpParam != NULL) { env->ReleasePrimitiveArrayCritical(pJavaParam, lpParam, 0); } if (lpValue != NULL) { env->ReleasePrimitiveArrayCritical(pJavaValue, lpValue, 0); } return translateError(lStatus); }
//----------------------------------------------------------------------------- void setParameterClass(AEffect *e, long index, float value) { AudioEffect *ae = (AudioEffect *)(e->object); ae->setParameter(index, value); }
//------------------------------------------------------------------------------------------------------- void AudioEffect::setParameterClass (AEffect* e, VstInt32 index, float value) { AudioEffect* ae = (AudioEffect*)(e->object); ae->setParameter (index, value); }