Skip to content

Commit 043c281

Browse files
committed
Various fixes to examples
1 parent c54aef0 commit 043c281

File tree

7 files changed

+194
-116
lines changed

7 files changed

+194
-116
lines changed

caw/Cargo.toml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,3 @@ required-features = [ "interactive" ]
6767
[[example]]
6868
name = "audio_file_playback"
6969
required-features = [ "interactive", "audio_file" ]
70-
71-
[[example]]
72-
name = "guitar_strings"
73-
required-features = [ "interactive" ]

caw/examples/electric_organ_level_1.rs

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ impl Effects<f32, f32, f32> {
2323
}
2424

2525
fn drum_loop(
26-
trig: impl FrameSigT<Item = bool>,
26+
trig: impl SigT<Item = bool>,
2727
pattern: Vec<u8>,
2828
channel: Channel,
2929
) -> Sig<impl SigT<Item = f32>> {
@@ -41,7 +41,7 @@ fn voice(
4141
key_down_gate,
4242
key_press_trig,
4343
..
44-
}: MonoVoice<impl FrameSigT<Item = KeyEvents>>,
44+
}: MonoVoice<impl SigT<Item = KeyEvents>>,
4545
effect_x: impl SigT<Item = f32>,
4646
effect_y: impl SigT<Item = f32>,
4747
channel: Channel,
@@ -71,7 +71,7 @@ fn voice_bass(
7171
key_down_gate,
7272
key_press_trig,
7373
..
74-
}: MonoVoice<impl FrameSigT<Item = KeyEvents>>,
74+
}: MonoVoice<impl SigT<Item = KeyEvents>>,
7575
channel: Channel,
7676
) -> Sig<impl SigT<Item = f32>> {
7777
let oscillator = pulse_pwm(note.freq_hz() / 2.0)
@@ -87,8 +87,8 @@ fn voice_bass(
8787
}
8888

8989
fn virtual_key_events(
90-
trig: impl FrameSigT<Item = bool>,
91-
) -> FrameSig<impl FrameSigT<Item = KeyEvents>> {
90+
trig: impl SigT<Item = bool>,
91+
) -> Sig<impl SigT<Item = KeyEvents>> {
9292
let chords = [
9393
chord(note_name::C, MINOR),
9494
chord(note_name::B, MAJOR),
@@ -99,8 +99,8 @@ fn virtual_key_events(
9999
index: usize,
100100
}
101101
let mut state = State { index: 0 };
102-
let trig = FrameSig(trig);
103-
trig.divide(32).map(move |t| {
102+
let trig = Sig(trig);
103+
trig.divide(32).map_mut(move |t| {
104104
let inversion = Inversion::InOctave {
105105
octave_base: note::A2,
106106
};
@@ -149,15 +149,15 @@ fn virtual_key_events(
149149
}
150150

151151
fn virtual_key_events_bass(
152-
trig: impl FrameSigT<Item = bool>,
153-
) -> FrameSig<impl FrameSigT<Item = KeyEvents>> {
152+
trig: impl SigT<Item = bool>,
153+
) -> Sig<impl SigT<Item = KeyEvents>> {
154154
let notes = [note::C2, note::B2, note::F2, note::G2];
155155
struct State {
156156
index: usize,
157157
}
158158
let mut state = State { index: 0 };
159-
let trig = FrameSig(trig);
160-
trig.divide(32).map(move |t| {
159+
let trig = Sig(trig);
160+
trig.divide(32).map_mut(move |t| {
161161
let mut events = KeyEvents::empty();
162162
if t {
163163
if state.index > 0 {
@@ -186,7 +186,7 @@ fn sig(_input: Input, channel: Channel) -> Sig<impl SigT<Item = f32>> {
186186
let snare = 1 << 1;
187187
let kick = 1 << 2;
188188
let trigger = periodic_trig_hz(effects.tempo * 8.).build().shared();
189-
let mut drums0 = drum_loop(
189+
let drums0 = drum_loop(
190190
trigger.clone(),
191191
vec![
192192
kick, hat_closed, hat_closed, kick, snare, hat_closed, kick,
@@ -195,32 +195,34 @@ fn sig(_input: Input, channel: Channel) -> Sig<impl SigT<Item = f32>> {
195195
],
196196
channel,
197197
);
198-
let mut drums1 = drum_loop(
198+
let drums1 = drum_loop(
199199
trigger.clone(),
200200
vec![
201201
kick, 0, 0, kick, snare, 0, kick, 0, 0, 0, 0, kick, snare, 0, kick,
202202
0,
203203
],
204204
channel,
205205
);
206-
let mut drums2 = drum_loop(
206+
let drums2 = drum_loop(
207207
trigger.clone(),
208208
vec![kick, 0, 0, 0, snare, 0, 0, 0, kick, 0, 0, 0, snare, 0, 0, 0],
209209
channel,
210210
);
211211
let drums = {
212212
let mut count = -1;
213-
let mut trigger = trigger.clone().divide(128);
214-
Sig::from_buf_fn(move |ctx, buf| {
215-
if trigger.frame_sample(ctx) {
216-
count += 1;
217-
}
218-
match (count % 4).cmp(&2) {
219-
Ordering::Less => drums2.sample(ctx).clone_to_vec(buf),
220-
Ordering::Equal => drums1.sample(ctx).clone_to_vec(buf),
221-
Ordering::Greater => drums0.sample(ctx).clone_to_vec(buf),
222-
}
223-
})
213+
let trigger = trigger.clone().divide(128);
214+
trigger.zip4(drums0, drums1, drums2).map_mut(
215+
move |(trigger, drums0, drums1, drums2)| {
216+
if trigger {
217+
count += 1;
218+
}
219+
match (count % 4).cmp(&2) {
220+
Ordering::Less => drums2,
221+
Ordering::Equal => drums1,
222+
Ordering::Greater => drums0,
223+
}
224+
},
225+
)
224226
};
225227
let arp_config = ArpConfig::default()
226228
.with_shape(ArpShape::Random)

caw/examples/electric_organ_level_2.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use caw::prelude::*;
2-
use rand::{rngs::StdRng, seq::SliceRandom, Rng, SeedableRng};
2+
use rand::{Rng, SeedableRng, rngs::StdRng, seq::SliceRandom};
33

44
struct Effects<T, DV, DLPF>
55
where
@@ -23,7 +23,7 @@ impl Effects<f32, f32, f32> {
2323
}
2424

2525
fn drum_loop(
26-
trig: impl FrameSigT<Item = bool>,
26+
trig: impl SigT<Item = bool>,
2727
pattern: Vec<u8>,
2828
channel: Channel,
2929
) -> Sig<impl SigT<Item = f32>> {
@@ -41,7 +41,7 @@ fn voice(
4141
key_down_gate,
4242
key_press_trig,
4343
..
44-
}: MonoVoice<impl FrameSigT<Item = KeyEvents>>,
44+
}: MonoVoice<impl SigT<Item = KeyEvents>>,
4545
effect_x: impl SigT<Item = f32>,
4646
effect_y: impl SigT<Item = f32>,
4747
effect_z: impl SigT<Item = f32>,
@@ -72,7 +72,7 @@ fn voice_bass(
7272
key_down_gate,
7373
key_press_trig,
7474
..
75-
}: MonoVoice<impl FrameSigT<Item = KeyEvents>>,
75+
}: MonoVoice<impl SigT<Item = KeyEvents>>,
7676
channel: Channel,
7777
) -> Sig<impl SigT<Item = f32>> {
7878
let oscillator = oscillator(Triangle, note.freq_hz() / 2.0)
@@ -88,8 +88,8 @@ fn voice_bass(
8888
}
8989

9090
fn virtual_key_events(
91-
trig: impl FrameSigT<Item = bool>,
92-
) -> FrameSig<impl FrameSigT<Item = KeyEvents>> {
91+
trig: impl SigT<Item = bool>,
92+
) -> Sig<impl SigT<Item = KeyEvents>> {
9393
let chords = [
9494
chord(note_name::C, MINOR),
9595
chord(note_name::E, MAJOR),
@@ -100,8 +100,8 @@ fn virtual_key_events(
100100
index: usize,
101101
}
102102
let mut state = State { index: 0 };
103-
let trig = FrameSig(trig);
104-
trig.divide(32).map(move |t| {
103+
let trig = Sig(trig);
104+
trig.divide(32).map_mut(move |t| {
105105
let inversion = Inversion::InOctave {
106106
octave_base: note::A2,
107107
};
@@ -150,15 +150,15 @@ fn virtual_key_events(
150150
}
151151

152152
fn virtual_key_events_bass(
153-
trig: impl FrameSigT<Item = bool>,
154-
) -> FrameSig<impl FrameSigT<Item = KeyEvents>> {
153+
trig: impl SigT<Item = bool>,
154+
) -> Sig<impl SigT<Item = KeyEvents>> {
155155
let notes = [note::C2, note::E2, note::F2, note::F2];
156156
struct State {
157157
index: usize,
158158
}
159159
let mut state = State { index: 0 };
160-
let trig = FrameSig(trig);
161-
trig.divide(32).map(move |t| {
160+
let trig = Sig(trig);
161+
trig.divide(32).map_mut(move |t| {
162162
let mut events = KeyEvents::empty();
163163
if t {
164164
if state.index > 0 {
@@ -277,7 +277,7 @@ fn main() -> anyhow::Result<()> {
277277
.stride(2)
278278
.build();
279279
let input = window.input();
280-
let rng_seed = StdRng::from_entropy().gen::<u64>();
280+
let rng_seed = rand::rng().random::<u64>();
281281
window.play_stereo(
282282
Stereo::new_fn_channel(|ch| sig(input.clone(), ch, rng_seed)),
283283
Default::default(),

caw/examples/electric_organ_menu.rs

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ impl Effects<f32, f32> {
1919
}
2020

2121
fn drum_loop(
22-
trig: impl FrameSigT<Item = bool>,
22+
trig: impl SigT<Item = bool>,
2323
pattern: Vec<u8>,
2424
channel: Channel,
2525
) -> Sig<impl SigT<Item = f32>> {
@@ -37,7 +37,7 @@ fn voice(
3737
key_down_gate,
3838
key_press_trig,
3939
..
40-
}: MonoVoice<impl FrameSigT<Item = KeyEvents>>,
40+
}: MonoVoice<impl SigT<Item = KeyEvents>>,
4141
effect_x: impl SigT<Item = f32>,
4242
effect_y: impl SigT<Item = f32>,
4343
channel: Channel,
@@ -69,7 +69,7 @@ fn voice_bass(
6969
key_down_gate,
7070
key_press_trig,
7171
..
72-
}: MonoVoice<impl FrameSigT<Item = KeyEvents>>,
72+
}: MonoVoice<impl SigT<Item = KeyEvents>>,
7373
channel: Channel,
7474
) -> Sig<impl SigT<Item = f32>> {
7575
let oscillator = oscillator(Saw, note.freq_hz())
@@ -85,39 +85,38 @@ fn voice_bass(
8585
oscillator.filter(low_pass::default(env * 1000.0))
8686
}
8787

88-
fn arp_shape(
89-
trig: impl FrameSigT<Item = bool>,
90-
) -> FrameSig<impl FrameSigT<Item = ArpShape>> {
91-
use rand::{rngs::StdRng, Rng, SeedableRng};
88+
fn arp_shape(trig: impl SigT<Item = bool>) -> Sig<impl SigT<Item = ArpShape>> {
89+
use rand::{Rng, SeedableRng, rngs::StdRng};
9290
struct State {
9391
rng: StdRng,
9492
indices: Vec<Option<usize>>,
9593
}
9694
let mut state = State {
97-
rng: StdRng::from_entropy(),
95+
rng: StdRng::from_rng(&mut rand::rng()),
9896
indices: vec![Some(0); 8],
9997
};
10098
const MAX_INDEX: usize = 6;
101-
let trig = FrameSig(trig);
102-
trig.divide(16).map(move |trig| {
99+
let trig = Sig(trig);
100+
trig.divide(16).map_mut(move |trig| {
103101
if trig {
104102
let index_to_change =
105-
state.rng.gen::<usize>() % state.indices.len();
106-
let value =
107-
if state.indices.len() <= 1 || state.rng.gen::<f64>() < 0.9 {
108-
Some(state.rng.gen::<usize>() % MAX_INDEX)
109-
} else {
110-
None
111-
};
103+
state.rng.random::<u32>() as usize % state.indices.len();
104+
let value = if state.indices.len() <= 1
105+
|| state.rng.random::<f64>() < 0.9
106+
{
107+
Some(state.rng.random::<u32>() as usize % MAX_INDEX)
108+
} else {
109+
None
110+
};
112111
state.indices[index_to_change] = value;
113112
}
114113
ArpShape::Indices(state.indices.clone())
115114
})
116115
}
117116

118117
fn virtual_key_events(
119-
trig: impl FrameSigT<Item = bool>,
120-
) -> FrameSig<impl FrameSigT<Item = KeyEvents>> {
118+
trig: impl SigT<Item = bool>,
119+
) -> Sig<impl SigT<Item = KeyEvents>> {
121120
let chords = [
122121
chord(note_name::C, MINOR),
123122
chord(note_name::C, MINOR),
@@ -127,8 +126,8 @@ fn virtual_key_events(
127126
index: usize,
128127
}
129128
let mut state = State { index: 0 };
130-
let trig = FrameSig(trig);
131-
trig.divide(32).map(move |t| {
129+
let trig = Sig(trig);
130+
trig.divide(32).map_mut(move |t| {
132131
let octave_base = note::A2;
133132
let mut events = KeyEvents::empty();
134133
if t {
@@ -163,15 +162,15 @@ fn virtual_key_events(
163162
}
164163

165164
fn virtual_key_events_bass(
166-
trig: impl FrameSigT<Item = bool>,
167-
) -> FrameSig<impl FrameSigT<Item = KeyEvents>> {
165+
trig: impl SigT<Item = bool>,
166+
) -> Sig<impl SigT<Item = KeyEvents>> {
168167
let notes = [note::C2, note::C2, note::G2];
169168
struct State {
170169
index: usize,
171170
}
172171
let mut state = State { index: 0 };
173-
let trig = FrameSig(trig);
174-
trig.divide(32).map(move |t| {
172+
let trig = Sig(trig);
173+
trig.divide(32).map_mut(move |t| {
175174
let mut events = KeyEvents::empty();
176175
if t {
177176
if state.index > 0 {

0 commit comments

Comments
 (0)