Advertisement
Guest User

Cross-fade-selector window generation

a guest
May 29th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1. #include "generate.h"
  2. #include <ad/dsp/window.h>
  3. #include <ad/dsp/bfunc.h>
  4.  
  5. using namespace xcope;
  6.  
  7. void test_window(signal_t &signal, int offset, int length, int config, bool force = false)
  8. {
  9.     typedef signal_t::T T;
  10.     if (signal.enabled || force) {
  11.         signal.reset();
  12.  
  13.         if (offset < 0) {
  14.             ad::dsp::window::select_window(length, (T *)signal.value, config);
  15.             ad::dsp::bfunc::copy((T *)signal.value, (T *)signal.value - offset, length);
  16.         } else {
  17.             ad::dsp::window::select_window(length, (T *)signal.value + offset, config);
  18.         }
  19.     }
  20. }
  21.  
  22. struct generator_cf_t : xcope::generator_t
  23. {
  24.     generator_cf_t() : xcope::generator_t("cross-fade") {}
  25.     virtual void operator()(signals_t &signal, int length, controls_t &control)
  26.     {
  27.         ctrl_list_t &config = control("config");
  28.         ctrl_list_t &parameter = control("parameter");
  29.  
  30.         const float cycles = config.get_value("cycles");
  31.  
  32.         xcope::control_t *n = parameter["fc"];
  33.         if (n) {
  34.             n->prop.min = 0;
  35.             n->prop.max = 8;
  36.             n->prop.integer = true;
  37.         }
  38.  
  39.         xcope::control_t *window = parameter["window"];
  40.         if (window) {
  41.             window->value_to_text = &xcope::window_index_to_text;
  42.             window->prop.min = 0;
  43.             window->prop.max = 64;
  44.             window->prop.value = 1;
  45.             window->prop.integer = true;
  46.             window->prop.menu_content = menu_content::window;
  47.         }
  48.  
  49.         char name[4] = {'w', '0', 0, 0};
  50.         const int elements = 4;
  51.         const int step = length / (elements - 1);
  52.         int offset = -step;
  53.  
  54.         for (int i = 0; i < elements; i++) {
  55.             name[1] = '1' + i;
  56.             test_window(signal(name), offset, step * 2, int(window->get_value()));
  57.             offset += step;
  58.         }
  59.     }
  60. } generator_window;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement