00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "scripts.h"
00015
00016 void envelope_script(void)
00017 {
00018 mgk_data_type type;
00019 envelope_script_context *cxt = mgk_node_context(mgk_current_node(),&type);
00020 printf("env\n");
00021 fflush(stdout);
00022 if(cxt && (type & T_BUFFER)) {
00023 int i,size,do_reset = FALSE;
00024 float *data = mgk_receive(0,&type);
00025 if((data) &&
00026 (type == (T_FLOAT | T_BUFFER)) &&
00027 ((size = mgk_buffer_size(data) / sizeof(float)) > 0)) {
00028 if(!cxt->Buffer) {
00029 cxt->Buffer = mgk_allocate_buffer((sizeof(float) * size),0);
00030 if(!cxt->Buffer) {
00031 return;
00032 }
00033 mgk_protect_buffer(cxt->Buffer);
00034 do_reset = TRUE;
00035 }
00036 if(gui_get_button_value(ENV_RESET)) {
00037 (*(cxt->Reset))++;
00038 }
00039 if(*(cxt->Reset) != cxt->LastReset) {
00040 do_reset = TRUE;
00041 cxt->LastReset = *(cxt->Reset);
00042 }
00043 if(do_reset) {
00044 for(i = 0; i < size; i++) {
00045 ((float *)(cxt->Buffer))[i] = data[i];
00046 }
00047 }
00048 else {
00049 for(i = 0; i < size; i++) {
00050 data[i] = ((float *)(cxt->Buffer))[i] =
00051 max(data[i],((float *)(cxt->Buffer))[i]);
00052 }
00053 }
00054 mgk_propagate(0,data,(T_BUFFER | T_FLOAT));
00055 }
00056 }
00057 }
00058