Skip to content

Commit 1cf9864

Browse files
committed
Stereo Width control
1 parent 538dee9 commit 1cf9864

File tree

4 files changed

+64
-18
lines changed

4 files changed

+64
-18
lines changed

Humonica.jsfx

+32-9
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ in_pin:Right
66
out_pin:Left
77
out_pin:Right
88

9-
slider1:attack_ms=1<0,100,1>-Attack (ms)
10-
slider2:release_ms=10<1,300,1>-Release (ms)
9+
slider1:attack_ms=5<0,1000,1>-Attack (ms)
10+
slider2:release_ms=10<1,2000,1>-Release (ms)
1111
slider3:window_ms=30<20,150,1>-Window (ms)
1212
slider4:crossover_ratio=1.25<1,10,0.25>-Window crossover factor
1313
slider5:latency_switch=0<0,1,1{on,off}>-Latency compensation
@@ -22,6 +22,7 @@ slider13:vib_mode=1<0,1,1{tracking,LFO}>-Vib mode
2222
slider14:vib_lfo_scale_cents=10<0,100,1>-Vib LFO cents
2323
slider15:vib_lfo_hz=4<0.5,10,.01>-Vib LFO Hz
2424
slider16:vib_lfo_attack_ms=350<1,2000,1>-Vib LFO attack (ms)
25+
slider17:stereo_width=1<0,1,0>-Stereo Width
2526

2627
import ui-lib.jsfx-inc
2728
import synth-framework.jsfx-inc
@@ -46,6 +47,13 @@ input_buffer_length = MAX_WINDOW_SAMPLES;
4647
freemem = (input_buffer0 = freemem) + input_buffer_length;
4748
freemem = (input_buffer1 = freemem) + input_buffer_length;
4849

50+
// Wipe all buffers
51+
i = 0;
52+
while (i < freemem) (
53+
i[] = 0;
54+
i += 1;
55+
);
56+
4957
freemem = ui_setup(freemem);
5058
freemem = synth_setup(freemem, 9/*NOTE: TIMBRE_FACTOR, WAVELENGTH_L, INDEX_L, LFO_PHASE_L, LFO_FREQ_DIFF_L, WAVELENGTH_R, INDEX_R, LFO_PHASE_R, LFO_FREQ_DIFF_R*/);
5159

@@ -442,6 +450,12 @@ while (note > 0) (
442450
spl0 = filter_buffer_sample(filter_left, spl0);
443451
spl1 = filter_buffer_sample(filter_right, spl1);
444452

453+
splm = (spl0 + spl1)*0.5;
454+
spls = (spl0 - spl1)*0.5*stereo_width;
455+
456+
spl0 = splm + spls;
457+
spl1 = splm - spls;
458+
445459
@gfx 645 400
446460

447461
function labelled_dial(value, low, high, bias, label, number_format, default) (
@@ -484,13 +498,14 @@ ui_screen() == "main" ? (
484498

485499
ui_split_bottomratio(0.15);
486500
control_background_technical();
487-
ui_graph_circular(kernelA0[0] ? kernelA0 : kernelA1, window_samples, 1, -window_samples/2, kernel_length, p0.00000001, 0.00000001);
501+
//ui_graph_circular(kernelA0[0] ? kernelA0 : kernelA1, window_samples, 1, -window_samples/2, kernel_length, p0.00000001, 0.00000001);
488502
control_finish_technical();
489503
ui_pop();
490504

491505
ui_split_topratio(0.5);
492506
ui_split_leftratio(4/7);
493507
control_group("Analysis");
508+
ui_pad(-1, 0);
494509
ui_split_leftratio(1/4);
495510
window_ms = labelled_dial(window_ms, 5, 150, 1.5, "Window", "%ims", 30);
496511
ui_split_next();
@@ -504,6 +519,7 @@ ui_screen() == "main" ? (
504519

505520
ui_split_leftratio(3/3);
506521
control_group("Timbre");
522+
ui_pad(-1, 0);
507523
ui_split_leftratio(1/3);
508524
timbre_shift_semitones = labelled_dial(timbre_shift_semitones, -12, 12, 0, "Shift", "%.1f st", 0);
509525
ui_split_next();
@@ -514,11 +530,18 @@ ui_screen() == "main" ? (
514530
ui_pop();
515531
ui_pop();
516532

517-
ui_split_leftratio(5/7);
518-
control_group("Pitch & Vibrato");
519-
ui_split_leftratio(1/5);
520-
lr_detune_cents = labelled_dial(lr_detune_cents, 0, 100, 4, "L/R Detune", "%i cents", 5);
533+
ui_split_leftratio(2/8);
534+
control_group("Stereo");
535+
ui_split_leftratio(1/2);
536+
lr_detune_cents = labelled_dial(lr_detune_cents, 0, 100, 4, "Detune", lr_detune_cents < 2 ? "%.1f cents" : "%i cents", 5);
521537
ui_split_next();
538+
stereo_width = labelled_dial(stereo_width, 0, 1, 0, "Width", "", 1);
539+
ui_pop();
540+
ui_pop();
541+
542+
ui_split_leftratio(4/6);
543+
control_group("Vibrato");
544+
ui_split_leftratio(1/4);
522545
vib_mode = labelled_switch(vib_mode, "Vibrato", vib_mode ? "LFO" : "tracking");
523546
ui_split_next();
524547
vib_mode ? (
@@ -544,9 +567,9 @@ ui_screen() == "main" ? (
544567
ui_split_leftratio(2/2);
545568
control_group("Envelope");
546569
ui_split_leftratio(1/2);
547-
attack_ms = labelled_dial(attack_ms, 0, 100, 3, "Attack", "%ims", 1);
570+
attack_ms = labelled_dial(attack_ms, 0, 1000, 5, "Attack", "%ims", 5);
548571
ui_split_next();
549-
release_ms = labelled_dial(release_ms, 0, 300, 3, "Release", "%ims", 10);
572+
release_ms = labelled_dial(release_ms, 0, 2000, 5, "Release", "%ims", 10);
550573
ui_pop();
551574
ui_pop();
552575

Humonica.png

-520 Bytes
Loading

Humonica.txt

+32-9
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ in_pin:Right
55
out_pin:Left
66
out_pin:Right
77

8-
slider1:attack_ms=1<0,100,1>-Attack (ms)
9-
slider2:release_ms=10<1,300,1>-Release (ms)
8+
slider1:attack_ms=5<0,1000,1>-Attack (ms)
9+
slider2:release_ms=10<1,2000,1>-Release (ms)
1010
slider3:window_ms=30<20,150,1>-Window (ms)
1111
slider4:crossover_ratio=1.25<1,10,0.25>-Window crossover factor
1212
slider5:latency_switch=0<0,1,1{on,off}>-Latency compensation
@@ -21,6 +21,7 @@ slider13:vib_mode=1<0,1,1{tracking,LFO}>-Vib mode
2121
slider14:vib_lfo_scale_cents=10<0,100,1>-Vib LFO cents
2222
slider15:vib_lfo_hz=4<0.5,10,.01>-Vib LFO Hz
2323
slider16:vib_lfo_attack_ms=350<1,2000,1>-Vib LFO attack (ms)
24+
slider17:stereo_width=1<0,1,0>-Stereo Width
2425

2526
import ui-lib.jsfx-inc
2627
import synth-framework.jsfx-inc
@@ -45,6 +46,13 @@ input_buffer_length = MAX_WINDOW_SAMPLES;
4546
freemem = (input_buffer0 = freemem) + input_buffer_length;
4647
freemem = (input_buffer1 = freemem) + input_buffer_length;
4748

49+
// Wipe all buffers
50+
i = 0;
51+
while (i < freemem) (
52+
i[] = 0;
53+
i += 1;
54+
);
55+
4856
freemem = ui_setup(freemem);
4957
freemem = synth_setup(freemem, NOTE##);
5058

@@ -441,6 +449,12 @@ while (note > 0) (
441449
spl0 = filter_buffer_sample(filter_left, spl0);
442450
spl1 = filter_buffer_sample(filter_right, spl1);
443451

452+
splm = (spl0 + spl1)*0.5;
453+
spls = (spl0 - spl1)*0.5*stereo_width;
454+
455+
spl0 = splm + spls;
456+
spl1 = splm - spls;
457+
444458
@gfx 645 400
445459

446460
function labelled_dial(value, low, high, bias, label, number_format, default) (
@@ -483,13 +497,14 @@ ui_screen() == "main" ? (
483497

484498
ui_split_bottomratio(0.15);
485499
control_background_technical();
486-
ui_graph_circular(kernelA0[0] ? kernelA0 : kernelA1, window_samples, 1, -window_samples/2, kernel_length, p0.00000001, 0.00000001);
500+
//ui_graph_circular(kernelA0[0] ? kernelA0 : kernelA1, window_samples, 1, -window_samples/2, kernel_length, p0.00000001, 0.00000001);
487501
control_finish_technical();
488502
ui_pop();
489503

490504
ui_split_topratio(0.5);
491505
ui_split_leftratio(4/7);
492506
control_group("Analysis");
507+
ui_pad(-1, 0);
493508
ui_split_leftratio(1/4);
494509
window_ms = labelled_dial(window_ms, 5, 150, 1.5, "Window", "%ims", 30);
495510
ui_split_next();
@@ -503,6 +518,7 @@ ui_screen() == "main" ? (
503518

504519
ui_split_leftratio(3/3);
505520
control_group("Timbre");
521+
ui_pad(-1, 0);
506522
ui_split_leftratio(1/3);
507523
timbre_shift_semitones = labelled_dial(timbre_shift_semitones, -12, 12, 0, "Shift", "%.1f st", 0);
508524
ui_split_next();
@@ -513,11 +529,18 @@ ui_screen() == "main" ? (
513529
ui_pop();
514530
ui_pop();
515531

516-
ui_split_leftratio(5/7);
517-
control_group("Pitch & Vibrato");
518-
ui_split_leftratio(1/5);
519-
lr_detune_cents = labelled_dial(lr_detune_cents, 0, 100, 4, "L/R Detune", "%i cents", 5);
532+
ui_split_leftratio(2/8);
533+
control_group("Stereo");
534+
ui_split_leftratio(1/2);
535+
lr_detune_cents = labelled_dial(lr_detune_cents, 0, 100, 4, "Detune", lr_detune_cents < 2 ? "%.1f cents" : "%i cents", 5);
520536
ui_split_next();
537+
stereo_width = labelled_dial(stereo_width, 0, 1, 0, "Width", "", 1);
538+
ui_pop();
539+
ui_pop();
540+
541+
ui_split_leftratio(4/6);
542+
control_group("Vibrato");
543+
ui_split_leftratio(1/4);
521544
vib_mode = labelled_switch(vib_mode, "Vibrato", vib_mode ? "LFO" : "tracking");
522545
ui_split_next();
523546
vib_mode ? (
@@ -543,9 +566,9 @@ ui_screen() == "main" ? (
543566
ui_split_leftratio(2/2);
544567
control_group("Envelope");
545568
ui_split_leftratio(1/2);
546-
attack_ms = labelled_dial(attack_ms, 0, 100, 3, "Attack", "%ims", 1);
569+
attack_ms = labelled_dial(attack_ms, 0, 1000, 5, "Attack", "%ims", 5);
547570
ui_split_next();
548-
release_ms = labelled_dial(release_ms, 0, 300, 3, "Release", "%ims", 10);
571+
release_ms = labelled_dial(release_ms, 0, 2000, 5, "Release", "%ims", 10);
549572
ui_pop();
550573
ui_pop();
551574

doc/images/Humonica.png

-1.27 KB
Loading

0 commit comments

Comments
 (0)