ok Mr 10 post sock puppet..... are you an xhip rep?
no
so ignore my post and move on, there's a good girl.
I looked at and fixed that issue already. The fact is there simply isn't enough space to satisfy you with this particular knob, this spacing (including text), font face, font size and these LEDs. It's possible to position the LEDs elsewhere but I prefer the way it is now.
Likewise, happy new year everyone!Mutant wrote: ↑Mon Dec 31, 2018 11:27 pm Happy 2019.
And a little feature request.
This was in some earlier version, got lost with the new UI.
Displaying the numerical value of a touched (and/or maybe even just hovered over) knob without having to turn the knob.
Solves the problem of wondering if i have the modulation set to 0.0 or 0.02.
Code: Select all
textflags mode(alignment_t::center, alignment_t::top);
origin_t origin = origin_t::bottom;
point text_offset = point(0, 2);
bool skip = false;
switch (i) {
case xhip::parameter::glide_mode:
case xhip::parameter::osc_a_invert:
case xhip::parameter::osc_b_invert:
skip = true;
break;
case xhip::parameter::sync_mode:
case xhip::parameter::flt_mode:
case xhip::parameter::shaper_type:
case xhip::parameter::glide_type:
origin = origin_t::top;
mode.vertical = alignment_t::bottom;
text_offset = point(0, -2);
break;
case xhip::parameter::lfo_a_sync:
case xhip::parameter::lfo_b_sync:
origin = origin_t::left;
mode.horizontal = alignment_t::right;
mode.vertical = alignment_t::center;
text_offset = point(-8, 0);
break;
}
Code: Select all
// everything inside skin is the top level "default" rule
skin
{
knob { text { offset = (0, 12); } }
// sub categories can override the default rule
filter
{
knob { text { offset = (0, -6); } }
// specific widgets can also override
cutoff { knob { text { offset = (15, 4); color = red; } } }
}
}
Code: Select all
skin.filter.cutoff.knob.text.offset = (15, 4);
Code: Select all
#include "branis_gui.h"
#include <ad/xhip/parameters.h>
#include <ad/gui/widgets/led.h>
using namespace ad;
using namespace ad::gui;
using namespace xhip;
namespace xhip
{
void add_wave_icon(element_t *v);
void select_lfo_wave_icon(element_t *v);
const char *lfo_range_labels[] =
{
"Low",
"Audio",
"Tempo",
};
gui::led_strip_layout lfo_range_layout =
{
point(42, 38),
point(0, 20),
point(0, -10),
point(0, 0),
lfo_range_labels,
0,
"led green",
3,
};
const char *lfo_bias_labels[] =
{
"-",
"0",
"+",
};
gui::led_strip_layout lfo_bias_layout =
{
point(42, 38),
point(0, 20),
point(0, -10),
point(4, 0),
lfo_bias_labels,
0,
"led green",
3,
};
};
void xhip::gui::populate_envelope(element_t *p, int i)
{
element_t *main = add_group(p, point(0, 0), "main");
int edelta = i * (parameter::env_b_attack - parameter::env_a_attack);
add_knob(main, ga(0, 0), xhip::parameter(parameter::env_a_attack + edelta));
//add_knob(e, ga(0.5, 0), xhip::parameter(parameter::env_a_peak + edelta));
add_knob(main, ga(1, 0), xhip::parameter(parameter::env_a_decay + edelta));
add_knob(main, ga(2, 0), xhip::parameter(parameter::env_a_sustain + edelta));
add_knob(main, ga(3, 0), xhip::parameter(parameter::env_a_release + edelta));
add_slsw(main, ga(0, 1), xhip::parameter(parameter::env_a_attacksync + edelta));
add_knob(main, ga(1, 1), xhip::parameter(parameter::env_a_keytrack + edelta));
add_ddrp(main, ga(2, 1), xhip::parameter(parameter::env_a_trigger + edelta));
element_t *mleds = add_group(p, point(0, 0), "leds");
point loffset = point(8, 25);
add__led(mleds, ga(0, 0) + loffset, "led green", "Aled");
add__led(mleds, ga(1, 0) + loffset, "led green", "Dled");
add__led(mleds, ga(2, 0) + loffset, "led yellow", "Sled");
add__led(mleds, ga(3, 0) + loffset, "led red", "Rled");
add__led(mleds, ga(2, 1) + point(28, 24), "led red", "Gled");
leds.env[i].attack = (control *)mleds->find("Aled");
leds.env[i].decay = (control *)mleds->find("Dled");
leds.env[i].sustain = (control *)mleds->find("Sled");
leds.env[i].release = (control *)mleds->find("Rled");
leds.env[i].gate = (control *)mleds->find("Gled");
main->expand_to_contain_children();
//element_t *mu = add_group(p, point(0, 0), "mutant");
//mu->hide();
//add_knob(mu, ga(0, 0), 0, );
p->expand_to_contain_children();
}
void xhip::gui::populate_lfo(element_t *p, int i)
{
element_t *main = add_group(p, point(0, 0), "main");
element_t *mleds = add_group(p, point(0, 0), "leds");
int mdelta = i * (parameter::lfo_b_frequency - parameter::lfo_a_frequency);
add_slsw(main, ga(3, -0.5f), xhip::parameter(parameter::lfo_a_sync + mdelta));
add_knob(main, ga(0, 0), xhip::parameter(parameter::lfo_a_frequency + mdelta));
add_knob(main, ga(1, 0), xhip::parameter(parameter::lfo_a_delay + mdelta));
element_t *wf =
add_ddrp(main, ga(2, 0), xhip::parameter(parameter::lfo_a_waveform + mdelta), 0, &dp.lfo);
add_knob(main, ga(0, 1), xhip::parameter(parameter::lfo_a_duty + mdelta));
add_knob(main, ga(1, 1), xhip::parameter(parameter::lfo_a_keytrack + mdelta));
#if 1
// slide switches
element_t *lfo_range = add_slsw(main, ga(2, 1), xhip::parameter(parameter::lfo_a_range + mdelta));
element_t *lfo_bias = add_slsw(main, ga(3, 1), xhip::parameter(parameter::lfo_a_bias + mdelta));
ASSERT(lfo_range);
if (lfo_range) {
add_text(lfo_range, "Low", textflags(alignment_t::center, alignment_t::bottom), origin_t::left_top);
add_text(lfo_range, "Audio", textflags(alignment_t::center, alignment_t::top), origin_t::bottom, point(0, -2));
add_text(lfo_range, "Tempo", textflags(alignment_t::center, alignment_t::bottom), origin_t::right_top);
}
ASSERT(lfo_bias);
if (lfo_bias) {
add_text(lfo_bias, "-", textflags(alignment_t::left, alignment_t::top), origin_t::left_bottom, point(0, -2));
add_text(lfo_bias, "0", textflags(alignment_t::center, alignment_t::bottom), origin_t::top);
add_text(lfo_bias, "+", textflags(alignment_t::right, alignment_t::top), origin_t::right_bottom, point(0, -2));
}
#else
// LED switches
add_leds(p, ga(2, 1) + point(-4, 0), xhip::parameter(parameter::lfo_a_range + mdelta), xhip::lfo_range_layout);
add_leds(p, ga(3, 1), xhip::parameter(parameter::lfo_a_bias + mdelta), xhip::lfo_bias_layout);
#endif
add_wave_icon(wf);
select_lfo_wave_icon(wf);
point loffset = point(8, 25);
add__led(mleds, ga(0, 0) + loffset, "led red", "Fled");
add__led(mleds, ga(1, 0) + loffset, "led yellow", "Dled");
leds.mod[i].on = (control *)mleds->find("Fled");
leds.mod[i].delay = (control *)mleds->find("Dled");
element_t *vl = add_group(mleds, point(22, -12), "Vleds");
vl->set_print_hide_children();
for (int j = 0; j < 3; j++) {
char name[16];
sprintf(name, "%i", j+1);
leds.mod[i].wave[j] = add__led(vl, point(7*j, 0), "led green", name);
}
vl->expand_to_contain_children();
p->expand_to_contain_children();
}
void xhip::gui::populate_modulators(element_t *p)
{
for (int i = 0; i < 2; i++) {
populate_envelope(add_group(p, point(0, 127 * i), "adsr"), i);
populate_lfo(add_group(p, point(0, 127 * (2 + i)), "lfo"), i);
}
p->expand_to_contain_children();
};
Code: Select all
#include "branis_gui.h"
#include <ad/xhip/parameters.h>
using namespace ad;
using namespace ad::gui;
using namespace xhip;
namespace xhip
{
const char *filter_menu =
"[68x12][lBypass]"
"[60x48]-=0,"
#if 0
"[68x12][lSallen-Key]"
"[60x12]Low 12 dB,Band 6 dB,High 6 dB,"
#endif
"[n]"
"[68x12][lKHN]"
"[60x12]Low 12 dB=1,High 12 dB,Band 6 dB,Notch,"
#if 0
"[68x12][lFour-pole]"
"[60x12]Low 24 dB=1,Low 18 dB,Low 12 dB,Low 6 dB,"
#endif
"[n]"
"[68x12][lKHN x2]"
"[60x12]Low 24 dB=5,High 24 dB,Band 12 dB,Notch x2,"
"[n]"
;
};
void xhip::gui::populate_filter(element_t *p)
{
add_knob(p, ga(0, 0), parameter::flt_cutoff);
add_knob(p, ga(1, 0), parameter::flt_resonance, 0, 1);
add_menu(p, ga(2, 0), drop_type_t::half_top, parameter::flt_mode, 0, xhip::filter_menu);
add_drop(p, ga(2, 0), drop_type_t::half_bottom, parameter::flt_trigger);
add_knob(p, ga(0, 1), parameter::flt_fmod);
add_knob(p, ga(1, 1), parameter::flt_qmod);
add_knob(p, ga(2, 1), parameter::flt_keytrack);
add_knob(p, ga(3, 1), parameter::flt_saturation);
add_knob(p, ga(0, 2), parameter::flt_env_a, 0, 1);
add_knob(p, ga(1, 2), parameter::flt_env_b, 0, 1);
add_knob(p, ga(2, 2), parameter::flt_lfo_a, 0, 1);
add_knob(p, ga(3, 2), parameter::flt_lfo_b, 0, 1);
p->expand_to_contain_children();
}
Code: Select all
filter
{
cutoff = "knob, (0, 0)";
resonance = "knob, (1, 0)";
mode = "menu ..., (2, 0)";
trigger = "menu ..., (2, 0)";
// etc
}
aciddose wrote: ↑Wed Jan 16, 2019 8:14 pm This version (on the alpha page) supports storing effects in presets using the "preset" effects tab. You'll need to manually use the menu in the effects section "store to preset" because the code isn't finished yet.
...
Most of the work I've been doing is going to apply directly to the route stuff as well, so that's good. The route stuff will need a lot more work of its own though since I plan to support 128 preset route configurations which will work exactly like the effects and just add extra route rows.
...
This version is highly optimized using runtime profiling and provides a "mod div" knob in the control section to use a reduced modulation rate. This will often have nasty effects on sounds but a large number of sounds are not significantly affected, usually pads and sounds you want a lot of unison for. So in those cases using mod div = 16 means you can get as much as 6 times as many voices. For example I can manage near 32 full voices normally, but with div = 16 I can get 200+.
© KVR Audio, Inc. 2000-2024
Submit: News, Plugins, Hosts & Apps | Advertise @ KVR | Developer Account | About KVR / Contact Us | Privacy Statement