void dss_squarewfix_reset(struct node_description *node) { struct dss_squarewfix_context *context = node->context; context->sampleStep = 1.0 / discrete_current_context->sample_rate; context->flip_flop = 1; /* Do the intial time shift and convert freq to off/on times */ context->tOff = 1.0 / DSS_SQUAREWFIX__FREQ; /* cycle time */ context->tLeft = DSS_SQUAREWFIX__PHASE / 360.0; /* convert start phase to % */ context->tLeft = context->tLeft - (int)context->tLeft; /* keep % between 0 & 1 */ context->tLeft = (context->tLeft < 0) ? 1.0 + context->tLeft : context->tLeft; /* if - then flip to + phase */ context->tLeft *= context->tOff; context->tOn = context->tOff * (DSS_SQUAREWFIX__DUTY / 100.0); context->tOff -= context->tOn; context->tLeft = -context->tLeft; /* toggle output and work out intial time shift */ while (context->tLeft <= 0) { context->flip_flop = context->flip_flop ? 0 : 1; context->tLeft += context->flip_flop ? context->tOn : context->tOff; } /* Step the output */ dss_squarewfix_step(node); }
void dss_squarewfix_reset(struct node_description *node) { struct dss_squarewfix_context *context = node->context; context->sampleStep = 1.0 / Machine->sample_rate; context->flip_flop = 1; /* Do the intial time shift and convert freq to off/on times */ context->tOff = 1.0 / node->input[1]; /* cycle time */ context->tLeft = node->input[5] / 360.0; /* convert start phase to % */ context->tLeft = context->tLeft - (int)context->tLeft; /* keep % between 0 & 1 */ context->tLeft = context->tLeft < 0 ? 1.0 + context->tLeft : context->tLeft; /* if - then flip to + phase */ context->tLeft *= context->tOff; context->tOn = context->tOff * (node->input[3] / 100.0); context->tOff -= context->tOn; context->tLeft = -context->tLeft; /* toggle output and work out intial time shift */ while (context->tLeft <= 0) { context->flip_flop = context->flip_flop ? 0 : 1; context->tLeft += context->flip_flop ? context->tOn : context->tOff; } /* Step the output */ dss_squarewfix_step(node); }
int dss_squarewfix_reset(struct node_description *node) { struct dss_squarewfix_context *context=(struct dss_squarewfix_context*)node->context; context->sampleStep = 1.0 / Machine->sample_rate; context->flip_flop = 1; /* Do the intial time shift and convert freq to off/on times */ context->tOff = 1.0 / node->input[1]; /* cycle time */ context->tLeft = node->input[5] / 360.0; /* convert start phase to % */ context->tLeft = context->tLeft - (int)context->tLeft; /* keep % between 0 & 1 */ context->tLeft = context->tLeft < 0 ? 1.0 + context->tLeft : context->tLeft; /* if - then flip to + phase */ context->tLeft *= context->tOff; context->tOn = context->tOff * (node->input[3] / 100.0); context->tOff -= context->tOn; discrete_log("RESET in - F:%f D:%f P:%f == tOff:%f tOn:%f tLeft:%f",node->input[1],node->input[3],node->input[5],context->tOff,context->tOn,context->tLeft); // while (context->tLeft >= context->flip_flop ? context->tOn : context->tOff) // { // context->tLeft -= context->flip_flop ? context->tOn : context->tOff; // context->flip_flop = context->flip_flop ? 0 : 1; // } context->tLeft = -context->tLeft; /* toggle output and work out intial time shift */ while (context->tLeft <= 0) { context->flip_flop = context->flip_flop ? 0 : 1; context->tLeft += context->flip_flop ? context->tOn : context->tOff; } discrete_log("RESET out - tLeft:%f FF:%d",context->tLeft,context->flip_flop); /* Step the output */ dss_squarewfix_step(node); return 0; }