Skip to content

Commit 3038220

Browse files
authored
Merge pull request #57 from ardura/WaveformUpdate
1.3.91 - Waveforms updated and a filter addition!
2 parents fb2d642 + 2d006b8 commit 3038220

8 files changed

Lines changed: 348 additions & 519 deletions

File tree

README.md

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Actuate (Latest is v1.3.9)
1+
# Actuate (Latest is v1.3.91)
22
A Subtractive and Additive Synthesizer, Sampler, and Granulizer built in Rust + Nih-Plug
33
Written by Ardura
44

@@ -23,13 +23,18 @@ Hover over any knob (or some labels) for an explanation!
2323
![image](https://github.com/ardura/Actuate/assets/31751444/accd4727-975a-4266-a82a-180c55db628d)
2424

2525

26-
- 12 Subtractive Oscillator shapes:
26+
- 17 Subtractive Oscillator shapes:
2727
- The standard: Sine, Triangle, Saw, Ramp, Square, Pulse, Noise
2828
- WSaw - Saw with noise variance to create crispyness
2929
- SSaw - Saw with small variance to create shimmer
3030
- RSaw - Rounded saw wave
3131
- RASaw - Rounded saw wave with random variances
3232
- RSquare - Rounded square wave
33+
- SkewSaw - A Saw with the rise skewed in one direction
34+
- Bent Saw - A Saw wave with an incomplete bend starting another saw in the middle
35+
- Step Saw - Looks like a staircase
36+
- ScSaw - An 'S' shaped Saw with a Cubic for the curve
37+
- AsymSaw - An asymmetrical saw shape
3338
- Additive Oscillators with up to 16 harmonics
3439
- FM Supported between Oscillators/samples/granulizer
3540
- 5 Main Filter Algorithms
@@ -43,9 +48,10 @@ Hover over any knob (or some labels) for an explanation!
4348
- Powf - I made this up - Curves based on Powf math function as it scales
4449
- Tilt Filter
4550
- VCF Filter
46-
- Analog inspired filter idea (Ardura's V4)
47-
- Analog inspired filter idea (Ardura's A4I)
48-
- Analog inspired filter idea (Ardura's A4I Take II)
51+
- V4 - Analog inspired filter idea (Ardura's V4 - Use this one for adding tone rather than filtering)
52+
- A4I - Analog inspired filter idea (Ardura's A4I)
53+
- A4II - Analog inspired filter idea (Ardura's A4I Take II)
54+
- A4III - Analog inspired filter idea (Ardura's A4II with some tweaks)
4955
- 11 Different FX for post processing
5056

5157
![image](https://github.com/ardura/Actuate/assets/31751444/c13b62bb-a29e-420c-9f3a-764950cbd4a2)
@@ -68,7 +74,9 @@ Hover over any knob (or some labels) for an explanation!
6874
## Signal Path
6975
![actuate_flow](https://github.com/ardura/Actuate/assets/31751444/45ce1d56-d6c1-47b2-8bae-09633ecbbd2e)
7076

71-
## Plugin Installation!!
77+
## Plugin Preset Installation!!
78+
*NOTE: This preset section is outdated now that Actuate has a "Download latest presets" Button in the browser!*
79+
7280
Actuate will look for presets and banks here, where USER is your username on your system:
7381

7482
- Linux: `/home/USER/Documents/ActuateDB/`

src/CustomWidgets/ui_knob.rs

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ impl<'a, P: Param> Widget for ArcKnob<'a, P> {
493493
painter.add(shape);
494494

495495
// Arc Balls
496-
let ball_width = self.line_width / 5.0;
496+
let ball_width = self.line_width / 5.5;
497497
let ball_line_stroke = Stroke::new(ball_width, self.line_color);
498498
let start_ball = Shape::Circle(CircleShape {
499499
center: get_start_point(self.arc_start, center, arc_radius + ball_width),
@@ -917,33 +917,6 @@ fn get_pointer_points(start: f32, end: f32, center: Pos2, radius: f32, value: f3
917917
vec![pos2(short_x, short_y), pos2(x, y)]
918918
}
919919

920-
/*
921-
fn get_arc_points(
922-
start: f32,
923-
end: f32,
924-
center: Pos2,
925-
radius: f32,
926-
value: f32,
927-
max_arc_distance: f32,
928-
) -> Vec<Pos2> {
929-
let start_turns: f32 = start;
930-
let arc_length = lerp(0.0, end, value);
931-
let end_turns = start_turns + arc_length;
932-
933-
let points = (arc_length.abs() / max_arc_distance).ceil() as usize;
934-
let points = points.max(1);
935-
(0..=points)
936-
.map(|i| {
937-
let t = i as f32 / (points - 1) as f32;
938-
let angle = lerp(start_turns * TAU, end_turns * TAU, t);
939-
let x = radius * angle.cos();
940-
let y = -radius * angle.sin();
941-
pos2(x, y) + center.to_vec2()
942-
})
943-
.collect()
944-
}
945-
*/
946-
947920
fn get_arc_points(
948921
start: f32,
949922
end: f32,

src/actuate_enums.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ pub enum FilterAlgorithms {
106106
V4,
107107
A4I,
108108
A4II,
109+
A4III,
109110
}
110111

111112
// Preset categories in dropdown

src/actuate_gui.rs

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,6 +1038,11 @@ pub(crate) fn make_actuate_gui(instance: &mut Actuate, _async_executor: AsyncExe
10381038
String::from("WSaw"),
10391039
String::from("SSaw"),
10401040
String::from("RASaw"),
1041+
String::from("SkewSaw"),
1042+
String::from("BentSaw"),
1043+
String::from("StepSaw"),
1044+
String::from("ScSaw"),
1045+
String::from("AsymSaw"),
10411046
String::from("Ramp"),
10421047
String::from("Square"),
10431048
String::from("RSquare"),
@@ -1089,6 +1094,11 @@ pub(crate) fn make_actuate_gui(instance: &mut Actuate, _async_executor: AsyncExe
10891094
String::from("WSaw"),
10901095
String::from("SSaw"),
10911096
String::from("RASaw"),
1097+
String::from("SkewSaw"),
1098+
String::from("BentSaw"),
1099+
String::from("StepSaw"),
1100+
String::from("ScSaw"),
1101+
String::from("AsymSaw"),
10921102
String::from("Ramp"),
10931103
String::from("Square"),
10941104
String::from("RSquare"),
@@ -1139,6 +1149,11 @@ pub(crate) fn make_actuate_gui(instance: &mut Actuate, _async_executor: AsyncExe
11391149
String::from("WSaw"),
11401150
String::from("SSaw"),
11411151
String::from("RASaw"),
1152+
String::from("SkewSaw"),
1153+
String::from("BentSaw"),
1154+
String::from("StepSaw"),
1155+
String::from("ScSaw"),
1156+
String::from("AsymSaw"),
11421157
String::from("Ramp"),
11431158
String::from("Square"),
11441159
String::from("RSquare"),
@@ -1586,7 +1601,8 @@ Tilt: A linear filter that cuts one side and boosts another
15861601
VCF: Voltage Controlled Filter model
15871602
V4: Analog Inspired Filter Idea
15881603
A4I: Averaged 4 Pole Integrator
1589-
A4II: Averaged 4 Pole Integrator II".to_string());
1604+
A4II: Averaged 4 Pole Integrator II
1605+
A4III: A4II with saturation changes".to_string());
15901606
ui.add(filter_alg_knob);
15911607
let filter_lp_knob = ui_knob::ArcKnob::for_param(
15921608
&params.filter_lp_amount,
@@ -1701,7 +1717,8 @@ Tilt: A linear filter that cuts one side and boosts another
17011717
VCF: Voltage Controlled Filter model
17021718
V4: Analog Inspired Filter Idea
17031719
A4I: Averaged 4 Pole Integrator
1704-
A4II: Averaged 4 Pole Integrator II".to_string());
1720+
A4II: Averaged 4 Pole Integrator II
1721+
A4III: A4II with saturation changes".to_string());
17051722
ui.add(filter_alg_knob);
17061723
let filter_wet_knob = ui_knob::ArcKnob::for_param(
17071724
&params.filter_wet,
@@ -1783,7 +1800,8 @@ Tilt: A linear filter that cuts one side and boosts another
17831800
VCF: Voltage Controlled Filter model
17841801
V4: Analog Inspired Filter Idea
17851802
A4I: Averaged 4 Pole Integrator
1786-
A4II: Averaged 4 Pole Integrator II".to_string());
1803+
A4II: Averaged 4 Pole Integrator II
1804+
A4III: A4II with saturation changes".to_string());
17871805
ui.add(filter_alg_knob);
17881806
let filter_wet_knob = ui_knob::ArcKnob::for_param(
17891807
&params.filter_wet,
@@ -1864,7 +1882,8 @@ Tilt: A linear filter that cuts one side and boosts another
18641882
VCF: Voltage Controlled Filter model
18651883
V4: Analog Inspired Filter Idea
18661884
A4I: Averaged 4 Pole Integrator
1867-
A4II: Averaged 4 Pole Integrator II".to_string());
1885+
A4II: Averaged 4 Pole Integrator II
1886+
A4III: A4II with saturation changes".to_string());
18681887
ui.add(filter_alg_knob);
18691888
let filter_wet_knob = ui_knob::ArcKnob::for_param(
18701889
&params.filter_wet,
@@ -1935,7 +1954,8 @@ Tilt: A linear filter that cuts one side and boosts another
19351954
VCF: Voltage Controlled Filter model
19361955
V4: Analog Inspired Filter Idea
19371956
A4I: Averaged 4 Pole Integrator
1938-
A4II: Averaged 4 Pole Integrator II".to_string());
1957+
A4II: Averaged 4 Pole Integrator II
1958+
A4III: A4II with saturation changes".to_string());
19391959
ui.add(filter_alg_knob);
19401960
let filter_wet_knob = ui_knob::ArcKnob::for_param(
19411961
&params.filter_wet,
@@ -1988,7 +2008,7 @@ A4II: Averaged 4 Pole Integrator II".to_string());
19882008
ui.add(filter_env_peak);
19892009
});
19902010
},
1991-
FilterAlgorithms::A4II => {
2011+
FilterAlgorithms::A4II | FilterAlgorithms::A4III => {
19922012
ui.vertical(|ui|{
19932013
let filter_alg_knob = ui_knob::ArcKnob::for_param(
19942014
&params.filter_alg_type,
@@ -2006,7 +2026,8 @@ Tilt: A linear filter that cuts one side and boosts another
20062026
VCF: Voltage Controlled Filter model
20072027
V4: Analog Inspired Filter Idea
20082028
A4I: Averaged 4 Pole Integrator
2009-
A4II: Averaged 4 Pole Integrator II".to_string());
2029+
A4II: Averaged 4 Pole Integrator II
2030+
A4III: A4II with saturation changes".to_string());
20102031
ui.add(filter_alg_knob);
20112032
let filter_wet_knob = ui_knob::ArcKnob::for_param(
20122033
&params.filter_wet,
@@ -2081,7 +2102,8 @@ Tilt: A linear filter that cuts one side and boosts another
20812102
VCF: Voltage Controlled Filter model
20822103
V4: Analog Inspired Filter Idea
20832104
A4I: Averaged 4 Pole Integrator
2084-
A4II: Averaged 4 Pole Integrator II".to_string());
2105+
A4II: Averaged 4 Pole Integrator II
2106+
A4III: A4II with saturation changes".to_string());
20852107
ui.add(filter_alg_knob);
20862108
let filter_lp_knob = ui_knob::ArcKnob::for_param(
20872109
&params.filter_lp_amount_2,
@@ -2192,7 +2214,8 @@ Tilt: A linear filter that cuts one side and boosts another
21922214
VCF: Voltage Controlled Filter model
21932215
V4: Analog Inspired Filter Idea
21942216
A4I: Averaged 4 Pole Integrator
2195-
A4II: Averaged 4 Pole Integrator II".to_string());
2217+
A4II: Averaged 4 Pole Integrator II
2218+
A4III: A4II with saturation changes".to_string());
21962219
ui.add(filter_alg_knob);
21972220
let filter_wet_knob = ui_knob::ArcKnob::for_param(
21982221
&params.filter_wet_2,
@@ -2273,7 +2296,8 @@ Tilt: A linear filter that cuts one side and boosts another
22732296
VCF: Voltage Controlled Filter model
22742297
V4: Analog Inspired Filter Idea
22752298
A4I: Averaged 4 Pole Integrator
2276-
A4II: Averaged 4 Pole Integrator II".to_string());
2299+
A4II: Averaged 4 Pole Integrator II
2300+
A4III: A4II with saturation changes".to_string());
22772301
ui.add(filter_alg_knob);
22782302
let filter_wet_knob = ui_knob::ArcKnob::for_param(
22792303
&params.filter_wet_2,
@@ -2355,7 +2379,8 @@ Tilt: A linear filter that cuts one side and boosts another
23552379
VCF: Voltage Controlled Filter model
23562380
V4: Analog Inspired Filter Idea
23572381
A4I: Averaged 4 Pole Integrator
2358-
A4II: Averaged 4 Pole Integrator II".to_string());
2382+
A4II: Averaged 4 Pole Integrator II
2383+
A4III: A4II with saturation changes".to_string());
23592384
ui.add(filter_alg_knob);
23602385
let filter_wet_knob = ui_knob::ArcKnob::for_param(
23612386
&params.filter_wet_2,
@@ -2437,7 +2462,8 @@ Tilt: A linear filter that cuts one side and boosts another
24372462
VCF: Voltage Controlled Filter model
24382463
V4: Analog Inspired Filter Idea
24392464
A4I: Averaged 4 Pole Integrator
2440-
A4II: Averaged 4 Pole Integrator II".to_string());
2465+
A4II: Averaged 4 Pole Integrator II
2466+
A4III: A4II with saturation changes".to_string());
24412467
ui.add(filter_alg_knob);
24422468
let filter_wet_knob = ui_knob::ArcKnob::for_param(
24432469
&params.filter_wet_2,
@@ -2490,7 +2516,7 @@ A4II: Averaged 4 Pole Integrator II".to_string());
24902516
ui.add(filter_env_peak);
24912517
});
24922518
},
2493-
FilterAlgorithms::A4II => {
2519+
FilterAlgorithms::A4II | FilterAlgorithms::A4III => {
24942520
ui.vertical(|ui|{
24952521
let filter_alg_knob = ui_knob::ArcKnob::for_param(
24962522
&params.filter_alg_type_2,
@@ -2508,7 +2534,8 @@ Tilt: A linear filter that cuts one side and boosts another
25082534
VCF: Voltage Controlled Filter model
25092535
V4: Analog Inspired Filter Idea
25102536
A4I: Averaged 4 Pole Integrator
2511-
A4II: Averaged 4 Pole Integrator II".to_string());
2537+
A4II: Averaged 4 Pole Integrator II
2538+
A4III: A4II with saturation changes".to_string());
25122539
ui.add(filter_alg_knob);
25132540
let filter_wet_knob = ui_knob::ArcKnob::for_param(
25142541
&params.filter_wet_2,

0 commit comments

Comments
 (0)