[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Sc-devel] commit? audio rate deman ugens



Hm, can't get the patch to apply. Could you send it as an attachment please?

Thanks
Dan

2008/1/20, Julian Rohrhuber <rohrhuber@xxxxxxxxxxxxxx>:
> Ok, here is the diff for the change that allows audio rate input to
> demand ugens. Attached is also a test. Seems to work fine as long as
> the audio rate ugen is involved in one other operation (this needs to
> be fixed still).
>
> commit?
>
>
> Index: /Volumes/data/sc/SuperCollider3/Source/plugins/DemandUGens.cpp
> ===================================================================
> --- /Volumes/data/sc/SuperCollider3/Source/plugins/DemandUGens.cpp
> (revision 7021)
> +++ /Volumes/data/sc/SuperCollider3/Source/plugins/DemandUGens.cpp
> (working copy)
> @@ -243,7 +243,7 @@
>                  if (ztrig > 0.f && prevtrig <= 0.f) {
>                          //Print("triggered\n");
>                          for (int j=2, k=0; j<unit->mNumInputs; ++j, ++k) {
> -                               float x = DEMANDINPUT(j);
> +                               float x = DEMANDINPUT_A(j, i + 1);
>                                  //printf("in  %d %g\n", k, x);
>                                  if (sc_isnan(x)) x = prevout[k];
>                                  else prevout[k] = x;
> @@ -291,7 +291,7 @@
>
>                  if (ztrig > 0.f && prevtrig <= 0.f) {
>                          for (int j=2, k=0; j<unit->mNumInputs; ++j, ++k) {
> -                               float x = DEMANDINPUT(j);
> +                               float x = DEMANDINPUT_A(j, i + 1);
>                                  if (sc_isnan(x)) x = prevout[k];
>                                  else prevout[k] = x;
>                                  out[k][i] = x;
> @@ -419,7 +419,7 @@
>                                  int doneAction = (int)ZIN0(duty_doneAction);
>                                  DoneAction(doneAction, unit);
>                          }
> -                       float x = DEMANDINPUT(duty_level);
> +                       float x = DEMANDINPUT_A(duty_level, i + 1);
>                          //printf("in  %d %g\n", k, x);
>                          if(sc_isnan(x)) {
>                                  x = prevout;
> @@ -463,13 +463,13 @@
>                          count = 0.f;
>                  }
>                  if (count <= 0.f) {
> -                       count = DEMANDINPUT(duty_dur) * sr + .5f + count;
> +                       count = DEMANDINPUT_A(duty_dur, i + 1) * sr +
> .5f + count;
>                          if(sc_isnan(count)) {
>                                  int doneAction = (int)ZIN0(duty_doneAction);
>                                  DoneAction(doneAction, unit);
>                          }
>
> -                       float x = DEMANDINPUT(duty_level);
> +                       float x = DEMANDINPUT_A(duty_level, i + 1);
>                          //printf("in  %d %g\n", k, x);
>                          if(sc_isnan(x)) {
>                                  x = prevout;
> @@ -510,17 +510,17 @@
>                          RESETINPUT(duty_level);
>                          RESETINPUT(duty_dur);
>                          count = 0.f;
> -                       reset = DEMANDINPUT(duty_reset) * sr + .5f + reset;
> +                       reset = DEMANDINPUT_A(duty_reset, i + 1) * sr
> + .5f + reset;
>                  } else {
>                          reset--;
>                  }
>                  if (count <= 0.f) {
> -                       count = DEMANDINPUT(duty_dur) * sr + .5f + count;
> +                       count = DEMANDINPUT_A(duty_dur, i + 1) * sr +
> .5f + count;
>                          if(sc_isnan(count)) {
>                                  int doneAction = (int)ZIN0(duty_doneAction);
>                                  DoneAction(doneAction, unit);
>                          }
> -                       float x = DEMANDINPUT(duty_level);
> +                       float x = DEMANDINPUT_A(duty_level, i + 1);
>                          //printf("in  %d %g\n", k, x);
>                          if(sc_isnan(x)) {
>                                  x = prevout;
> @@ -884,9 +884,9 @@
>                          // printf("reset: %f %f \n", zreset,
> unit->m_prevreset);
>                          RESETINPUT(d_env_level);
>                          if(zreset <= 1.f) {
> -                               DEMANDINPUT(d_env_level); // remove first level
> +                               DEMANDINPUT_A(d_env_level, i + 1); //
> remove first level
>                          } else {
> -                               level = DEMANDINPUT(d_env_level); //
> jump to first level
> +                               level = DEMANDINPUT_A(d_env_level, i
> + 1); // jump to first level
>                          }
>
>                          RESETINPUT(d_env_dur);
> @@ -918,7 +918,7 @@
>
>                                  // new time
>
> -                               float dur = DEMANDINPUT(d_env_dur);
> +                               float dur = DEMANDINPUT_A(d_env_dur, i + 1);
>                                  // printf("dur: %f \n", dur);
>                                  if(sc_isnan(dur)) {
>                                          release = true;
> @@ -930,8 +930,8 @@
>
>                                  // new shape
>                                  float count;
> -                               curve = DEMANDINPUT(d_env_shape);
> -                               shape = (int)DEMANDINPUT(d_env_shape);
> +                               curve = DEMANDINPUT_A(d_env_shape, i + 1);
> +                               shape = (int)DEMANDINPUT_A(d_env_shape, i + 1);
>
>                                  // printf("shapes: %i \n", shape);
>                                  if (sc_isnan(curve)) curve = unit->m_shape;
> @@ -948,7 +948,7 @@
>
>                                  // new end level
>
> -                               double endLevel = DEMANDINPUT(d_env_level);
> +                               double endLevel =
> DEMANDINPUT_A(d_env_level, i + 1);
>                                  // printf("levels: %f %f\n", level, endLevel);
>                                  if (sc_isnan(endLevel)) {
>                                          endLevel = unit->m_endLevel;
> @@ -1165,12 +1165,12 @@
>                          count = 0.f;
>                  }
>                  if (count <= 0.f) {
> -                       count = DEMANDINPUT(duty_dur) * sr + .5f + count;
> +                       count = DEMANDINPUT_A(duty_dur, i + 1) * sr +
> .5f + count;
>                          if(sc_isnan(count)) {
>                                  int doneAction = (int)ZIN0(2);
>                                  DoneAction(doneAction, unit);
>                          }
> -                       float x = DEMANDINPUT(duty_level);
> +                       float x = DEMANDINPUT_A(duty_level, i + 1);
>                          //printf("in  %d %g\n", k, x);
>                          if (sc_isnan(x)) x = 0.f;
>                          out[i] = x;
> @@ -1206,12 +1206,12 @@
>                          count = 0.f;
>                  }
>                  if (count <= 0.f) {
> -                       count = DEMANDINPUT(duty_dur) * sr + .5f + count;
> +                       count = DEMANDINPUT_A(duty_dur, i + 1) * sr +
> .5f + count;
>                          if(sc_isnan(count)) {
>                                  int doneAction = (int)ZIN0(2);
>                                  DoneAction(doneAction, unit);
>                          }
> -                       float x = DEMANDINPUT(duty_level);
> +                       float x = DEMANDINPUT_A(duty_level, i + 1);
>                          //printf("in  %d %g\n", k, x);
>                          if (sc_isnan(x)) x = 0.f;
>                          out[i] = x;
> @@ -1242,17 +1242,17 @@
>                          RESETINPUT(duty_level);
>                          RESETINPUT(duty_dur);
>                          count = 0.f;
> -                       reset = DEMANDINPUT(duty_reset) * sr + .5f + reset;
> +                       reset = DEMANDINPUT_A(duty_reset, i + 1) * sr
> + .5f + reset;
>                  } else {
>                          reset--;
>                  }
>                  if (count <= 0.f) {
> -                       count = DEMANDINPUT(duty_dur) * sr + .5f + count;
> +                       count = DEMANDINPUT_A(duty_dur, i + 1) * sr +
> .5f + count;
>                          if(sc_isnan(count)) {
>                                  int doneAction = (int)ZIN0(2);
>                                  DoneAction(doneAction, unit);
>                          }
> -                       float x = DEMANDINPUT(duty_level);
> +                       float x = DEMANDINPUT_A(duty_level, i + 1);
>                          //printf("in  %d %g\n", k, x);
>                          if (sc_isnan(x)) x = 0.f;
>                          out[i] = x;
> @@ -1299,10 +1299,10 @@
>   {
>          if (inNumSamples) {
>                  if (unit->m_repeats < 0.) {
> -                       float x = DEMANDINPUT(0);
> +                       float x = DEMANDINPUT_A(0, inNumSamples);
>                          unit->m_repeats = sc_isnan(x) ? 0.f : floor(x + 0.5f);
> -                       unit->m_value = DEMANDINPUT(1);
> -                       unit->m_step = DEMANDINPUT(2);
> +                       unit->m_value = DEMANDINPUT_A(1, inNumSamples);
> +                       unit->m_step = DEMANDINPUT_A(2, inNumSamples);
>                  }
>                  if (unit->m_repeatCount >= unit->m_repeats) {
>                          OUT0(0) = NAN;
> @@ -1329,10 +1329,10 @@
>   {
>          if (inNumSamples) {
>                  if (unit->m_repeats < 0.) {
> -                       float x = DEMANDINPUT(0);
> +                       float x = DEMANDINPUT_A(0, inNumSamples);
>                          unit->m_repeats = sc_isnan(x) ? 0.f : floor(x + 0.5f);
> -                       unit->m_value = DEMANDINPUT(1);
> -                       unit->m_grow = DEMANDINPUT(2);
> +                       unit->m_value = DEMANDINPUT_A(1, inNumSamples);
> +                       unit->m_grow = DEMANDINPUT_A(2, inNumSamples);
>                  }
>                  if (unit->m_repeatCount >= unit->m_repeats) {
>                          OUT0(0) = NAN;
> @@ -1359,10 +1359,10 @@
>   {
>          if (inNumSamples) {
>                  if (unit->m_repeats < 0.) {
> -                       float x = DEMANDINPUT(0);
> +                       float x = DEMANDINPUT_A(0, inNumSamples);
>                          unit->m_repeats = sc_isnan(x) ? 0.f : floor(x + 0.5f);
> -                       unit->m_lo = DEMANDINPUT(1);
> -                       float hi = DEMANDINPUT(2);
> +                       unit->m_lo = DEMANDINPUT_A(1, inNumSamples);
> +                       float hi = DEMANDINPUT_A(2, inNumSamples);
>                          unit->m_range = hi - unit->m_lo;
>                  }
>                  if (unit->m_repeatCount >= unit->m_repeats) {
> @@ -1390,10 +1390,10 @@
>   {
>          if (inNumSamples) {
>                  if (unit->m_repeats < 0.) {
> -                       float x = DEMANDINPUT(0);
> +                       float x = DEMANDINPUT_A(0, inNumSamples);
>                          unit->m_repeats = sc_isnan(x) ? 0.f : floor(x + 0.5f);
> -                       unit->m_lo = (int32)floor(DEMANDINPUT(1) + 0.5f);
> -                       int32 hi = (int32)floor(DEMANDINPUT(2) + 0.5f);
> +                       unit->m_lo = (int32)floor(DEMANDINPUT_A(1,
> inNumSamples) + 0.5f);
> +                       int32 hi = (int32)floor(DEMANDINPUT_A(2,
> inNumSamples) + 0.5f);
>                          unit->m_range = hi - unit->m_lo + 1;
>                  }
>                  if (unit->m_repeatCount >= unit->m_repeats) {
> @@ -1421,11 +1421,11 @@
>   {
>          if (inNumSamples) {
>                  if (unit->m_repeats < 0.) {
> -                       float x = DEMANDINPUT(0);
> +                       float x = DEMANDINPUT_A(0, inNumSamples);
>                          unit->m_repeats = sc_isnan(x) ? 0.f : floor(x + 0.5f);
> -                       unit->m_lo = DEMANDINPUT(1);
> -                       unit->m_hi = DEMANDINPUT(2);
> -                       unit->m_step = DEMANDINPUT(3);
> +                       unit->m_lo = DEMANDINPUT_A(1, inNumSamples);
> +                       unit->m_hi = DEMANDINPUT_A(2, inNumSamples);
> +                       unit->m_step = DEMANDINPUT_A(3, inNumSamples);
>                          unit->m_val = unit->mParent->mRGen->frand() *
> (unit->m_hi - unit->m_lo) + unit->m_lo;
>                  }
>                  if (unit->m_repeatCount >= unit->m_repeats) {
> @@ -1454,11 +1454,11 @@
>   {
>          if (inNumSamples) {
>                  if (unit->m_repeats < 0.) {
> -                       float x = DEMANDINPUT(0);
> +                       float x = DEMANDINPUT_A(0, inNumSamples);
>                          unit->m_repeats = sc_isnan(x) ? 0.f : floor(x + 0.5f);
> -                       unit->m_lo = (int32)floor(DEMANDINPUT(1) + 0.5f);
> -                       unit->m_hi = (int32)floor(DEMANDINPUT(2) + 0.5f);
> -                       unit->m_step = (int32)floor(DEMANDINPUT(3) + 0.5f);
> +                       unit->m_lo = (int32)floor(DEMANDINPUT_A(1,
> inNumSamples) + 0.5f);
> +                       unit->m_hi = (int32)floor(DEMANDINPUT_A(2,
> inNumSamples) + 0.5f);
> +                       unit->m_step = (int32)floor(DEMANDINPUT_A(3,
> inNumSamples) + 0.5f);
>                          unit->m_val =
> unit->mParent->mRGen->irand(unit->m_hi - unit->m_lo + 1) + unit->m_lo;
>                  }
>                  if (unit->m_repeatCount >= unit->m_repeats) {
> @@ -1489,7 +1489,7 @@
>          if (inNumSamples) {
>                  //Print("   unit->m_repeats %d\n", unit->m_repeats);
>                  if (unit->m_repeats < 0.) {
> -                       float x = DEMANDINPUT(0);
> +                       float x = DEMANDINPUT_A(0, inNumSamples);
>                          unit->m_repeats = sc_isnan(x) ? 0.f : floor(x + 0.5f);
>                  }
>                  while (true) {
> @@ -1509,7 +1509,7 @@
>                                          unit->m_needToResetChild = false;
>                                          RESETINPUT(unit->m_index);
>                                  }
> -                               float x = DEMANDINPUT(unit->m_index);
> +                               float x =
> DEMANDINPUT_A(unit->m_index, inNumSamples);
>                                  if (sc_isnan(x)) {
>                                          unit->m_index++;
>                                          unit->m_needToResetChild = true;
> @@ -1518,7 +1518,7 @@
>                                          return;
>                                  }
>                          } else {
> -                               OUT0(0) = IN0(unit->m_index);
> +                               OUT0(0) =
> DEMANDINPUT_A(unit->m_index, inNumSamples);
>                                  //Print("   unit->m_index %d
> OUT0(0) %g\n", unit->m_index, OUT0(0));
>                                  unit->m_index++;
>                                  unit->m_needToResetChild = true;
> @@ -1546,7 +1546,7 @@
>   {
>          if (inNumSamples) {
>                  if (unit->m_repeats < 0.) {
> -                       float x = DEMANDINPUT(0);
> +                       float x = DEMANDINPUT_A(0, inNumSamples);
>                          unit->m_repeats = sc_isnan(x) ? 0.f : floor(x + 0.5f);
>                  }
>                  while (true) {
> @@ -1562,7 +1562,7 @@
>                                          unit->m_needToResetChild = false;
>                                          RESETINPUT(unit->m_index);
>                                  }
> -                               float x = DEMANDINPUT(unit->m_index);
> +                               float x =
> DEMANDINPUT_A(unit->m_index, inNumSamples);
>                                  if (sc_isnan(x)) {
>                                          unit->m_index++;
>                                          unit->m_repeatCount++;
> @@ -1601,7 +1601,7 @@
>          if (inNumSamples) {
>
>                  if (unit->m_repeats < 0.) {
> -                       float x = DEMANDINPUT(0);
> +                       float x = DEMANDINPUT_A(0, inNumSamples);
>                          unit->m_repeats = sc_isnan(x) ? 0.f : floor(x + 0.5f);
>                  }
>                  while (true) {
> @@ -1614,7 +1614,7 @@
>                                          unit->m_needToResetChild = false;
>                                          RESETINPUT(unit->m_index);
>                                  }
> -                               float x = DEMANDINPUT(unit->m_index);
> +                               float x =
> DEMANDINPUT_A(unit->m_index, inNumSamples);
>                                  if (sc_isnan(x)) {
>                                          unit->m_index =
> unit->mParent->mRGen->irand(unit->mNumInputs - 1) + 1;
>                                          unit->m_repeatCount++;
> @@ -1624,7 +1624,7 @@
>                                          return;
>                                  }
>                          } else {
> -                               OUT0(0) = IN0(unit->m_index);
> +                               OUT0(0) =
> DEMANDINPUT_A(unit->m_index, inNumSamples);
>                                  unit->m_index =
> unit->mParent->mRGen->irand(unit->mNumInputs - 1) + 1;
>                                  unit->m_repeatCount++;
>                                  unit->m_needToResetChild = true;
> @@ -1652,7 +1652,7 @@
>   {
>          if (inNumSamples) {
>                  if (unit->m_repeats < 0.) {
> -                       float x = DEMANDINPUT(0);
> +                       float x = DEMANDINPUT_A(0, inNumSamples);
>                          unit->m_repeats = sc_isnan(x) ? 0.f : floor(x + 0.5f);
>                  }
>                  while (true) {
> @@ -1668,7 +1668,7 @@
>                                          unit->m_needToResetChild = false;
>                                          RESETINPUT(unit->m_index);
>                                  }
> -                               float x = DEMANDINPUT(unit->m_index);
> +                               float x =
> DEMANDINPUT_A(unit->m_index, inNumSamples);
>                                  if (sc_isnan(x)) {
>                                          int newindex =
> unit->mParent->mRGen->irand(unit->mNumInputs - 2) + 1;
>                                          unit->m_index = newindex <
> unit->m_index ? newindex : newindex + 1;
> @@ -1679,7 +1679,7 @@
>                                          return;
>                                  }
>                          } else {
> -                               OUT0(0) = IN0(unit->m_index);
> +                               OUT0(0) =
> DEMANDINPUT_A(unit->m_index, inNumSamples);
>                                  int newindex =
> unit->mParent->mRGen->irand(unit->mNumInputs - 2) + 1;
>                                  unit->m_index = newindex <
> unit->m_index ? newindex : newindex + 1;
>                                  unit->m_repeatCount++;
> @@ -1708,14 +1708,14 @@
>   void Dswitch1_next(Dswitch1 *unit, int inNumSamples)
>   {
>          if (inNumSamples) {
> -               float x = DEMANDINPUT(0);
> +               float x = DEMANDINPUT_A(0, inNumSamples);
>                  if (sc_isnan(x)) {
>                          OUT0(0) = x;
>                          return;
>                  }
>                  int index = (int32)floor(x + 0.5f);
>                  index = sc_wrap(index, 0, unit->mNumInputs - 2) + 1;
> -               OUT0(0) = DEMANDINPUT(index);
> +               OUT0(0) = DEMANDINPUT_A(index, inNumSamples);
>          } else {
>                  for (int i=0; i<unit->mNumInputs; ++i) {
>                          RESETINPUT(i);
> @@ -1736,10 +1736,10 @@
>          int index;
>          float ival;
>          if (inNumSamples) {
> -               float val = DEMANDINPUT(unit->m_index);
> +               float val = DEMANDINPUT_A(unit->m_index, inNumSamples);
>                  printf("index: %i\n", (int) val);
>                  if(sc_isnan(val)) {
> -                       ival = DEMANDINPUT(0);
> +                       ival = DEMANDINPUT_A(0, inNumSamples);
>
>                          if(sc_isnan(ival)) {
>                                  OUT0(0) = ival;
> @@ -1748,7 +1748,7 @@
>
>                          index = (int32)floor(ival + 0.5f);
>                          index = sc_wrap(index, 0, unit->mNumInputs - 2) + 1;
> -                       val = DEMANDINPUT(index);
> +                       val = DEMANDINPUT_A(unit->m_index, inNumSamples);
>
>                          RESETINPUT(unit->m_index);
>                          printf("resetting index: %i\n", unit->m_index);
> @@ -1761,7 +1761,7 @@
>                  for (int i=0; i<unit->mNumInputs; ++i) {
>                          RESETINPUT(i);
>                  }
> -               index = (int32)floor(DEMANDINPUT(0) + 0.5f);
> +               index = (int32)floor(DEMANDINPUT_A(0, inNumSamples) + 0.5f);
>                  index = sc_wrap(index, 0, unit->mNumInputs - 1) + 1;
>                  unit->m_index = index;
>          }
> @@ -1786,7 +1786,7 @@
>                  if (unit->m_bufcounter == unit->mWorld->mBufCounter) {
>                          OUT0(0) = unit->m_prev;
>                  } else {
> -                       float x = DEMANDINPUT(0);
> +                       float x = DEMANDINPUT_A(0, inNumSamples);
>                          unit->m_prev = x;
>                          OUT0(0) = x;
>                  }
> @@ -1846,7 +1846,7 @@
>                  {
>                          if (ISDEMANDINPUT(1))
>                          {
> -                               float x = DEMANDINPUT(1);
> +                               float x = DEMANDINPUT_A(1, inNumSamples);
>                                  if (sc_isnan(x)) {
>                                          OUT0(0) = NAN;
>                                          return;         //x = 0.0;
> --
>
>
>
>
>
> .
> _______________________________________________
> Sc-devel mailing list
> Sc-devel@xxxxxxxxxxxxxxx
> http://lists.create.ucsb.edu/mailman/listinfo/sc-devel
>
>
>


-- 
http://www.mcld.co.uk