|
@@ -45,7 +45,8 @@ fn main() {
|
|
|
|
|
|
let mut sounds = collect_sounds("media");
|
|
let mut sounds = collect_sounds("media");
|
|
let mut patterns = collect_patterns("patterns");
|
|
let mut patterns = collect_patterns("patterns");
|
|
-
|
|
|
|
|
|
+ let mut bpm = 120;
|
|
|
|
+
|
|
let mut timeline = Timeline::default();
|
|
let mut timeline = Timeline::default();
|
|
|
|
|
|
let mut pattern_col: usize = 0;
|
|
let mut pattern_col: usize = 0;
|
|
@@ -65,23 +66,26 @@ fn main() {
|
|
style.anti_aliased_fill = false;
|
|
style.anti_aliased_fill = false;
|
|
|
|
|
|
const PURPLE: [f32; 4] = [0.07, 0.05, 0.27, 1.00];
|
|
const PURPLE: [f32; 4] = [0.07, 0.05, 0.27, 1.00];
|
|
|
|
+ const YELLOW: [f32; 4] = [0.60, 0.25, 0.0, 1.00];
|
|
system.main_loop(move |_, ui| {
|
|
system.main_loop(move |_, ui| {
|
|
|
|
|
|
let colors = ui.push_style_colors(&[
|
|
let colors = ui.push_style_colors(&[
|
|
(StyleColor::FrameBg, PURPLE),
|
|
(StyleColor::FrameBg, PURPLE),
|
|
|
|
+ (StyleColor::FrameBgHovered, YELLOW),
|
|
(StyleColor::Button, PURPLE),
|
|
(StyleColor::Button, PURPLE),
|
|
|
|
+ (StyleColor::ButtonHovered, YELLOW),
|
|
(StyleColor::TitleBgActive, PURPLE),
|
|
(StyleColor::TitleBgActive, PURPLE),
|
|
(StyleColor::ResizeGrip, PURPLE),
|
|
(StyleColor::ResizeGrip, PURPLE),
|
|
|
|
+ (StyleColor::ResizeGripHovered, YELLOW),
|
|
(StyleColor::CheckMark, PURPLE),
|
|
(StyleColor::CheckMark, PURPLE),
|
|
(StyleColor::Tab, PURPLE),
|
|
(StyleColor::Tab, PURPLE),
|
|
|
|
+ (StyleColor::TabHovered, YELLOW),
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
|
|
Window::new(im_str!("sources"))
|
|
Window::new(im_str!("sources"))
|
|
- // .resizable(false)
|
|
|
|
.position([400.0, 140.0], Condition::Appearing)
|
|
.position([400.0, 140.0], Condition::Appearing)
|
|
.collapsible(false)
|
|
.collapsible(false)
|
|
- // .always_auto_resize(true)
|
|
|
|
.size([300.0, 300.0], Condition::FirstUseEver)
|
|
.size([300.0, 300.0], Condition::FirstUseEver)
|
|
.build(ui, || {
|
|
.build(ui, || {
|
|
|
|
|
|
@@ -101,7 +105,7 @@ fn main() {
|
|
}
|
|
}
|
|
ui.same_line(0.0);
|
|
ui.same_line(0.0);
|
|
if ui.small_button(im_str!("play")) {
|
|
if ui.small_button(im_str!("play")) {
|
|
- s.play(&dev);
|
|
|
|
|
|
+ s.play(&dev, bpm);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
@@ -125,7 +129,7 @@ fn main() {
|
|
}
|
|
}
|
|
ui.same_line(0.0);
|
|
ui.same_line(0.0);
|
|
if ui.small_button(im_str!("play")) {
|
|
if ui.small_button(im_str!("play")) {
|
|
- p.play(&dev);
|
|
|
|
|
|
+ p.play(&dev, bpm);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
@@ -167,7 +171,6 @@ fn main() {
|
|
.speed(0.05)
|
|
.speed(0.05)
|
|
.build();
|
|
.build();
|
|
|
|
|
|
- ui.drag_int(im_str!("bpm"), &mut active_pattern.bpm).build();
|
|
|
|
|
|
|
|
ui.text(im_str!("loc "));
|
|
ui.text(im_str!("loc "));
|
|
for x in 0..active_pattern.xsize {
|
|
for x in 0..active_pattern.xsize {
|
|
@@ -214,11 +217,12 @@ fn main() {
|
|
active_pattern.clear_sounds(y);
|
|
active_pattern.clear_sounds(y);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
ui.text(im_str!("pat {} {}", pattern_col, pattern_row));
|
|
ui.text(im_str!("pat {} {}", pattern_col, pattern_row));
|
|
if ui.small_button(&im_str!("play")) {
|
|
if ui.small_button(&im_str!("play")) {
|
|
- active_pattern.play(&dev);
|
|
|
|
|
|
+ active_pattern.play(&dev, bpm);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -238,19 +242,32 @@ fn main() {
|
|
.build();
|
|
.build();
|
|
|
|
|
|
ui.drag_float(im_str!("speed"), &mut s.speed)
|
|
ui.drag_float(im_str!("speed"), &mut s.speed)
|
|
- .min(0.0)
|
|
|
|
- .max(2.0)
|
|
|
|
|
|
+ .min(0.01)
|
|
|
|
+ .max(10.0)
|
|
.speed(0.01)
|
|
.speed(0.01)
|
|
.build();
|
|
.build();
|
|
|
|
|
|
|
|
+ ui.drag_int(im_str!("trim ms"), &mut s.trim)
|
|
|
|
+ .min(0)
|
|
|
|
+ .max(4000)
|
|
|
|
+ .speed(0.05)
|
|
|
|
+ .build();
|
|
|
|
+
|
|
ui.drag_int(im_str!("roll"), &mut s.roll)
|
|
ui.drag_int(im_str!("roll"), &mut s.roll)
|
|
|
|
+ .min(0)
|
|
.max(32)
|
|
.max(32)
|
|
- .speed(0.05)
|
|
|
|
|
|
+ .speed(0.01)
|
|
|
|
+ .build();
|
|
|
|
+
|
|
|
|
+ ui.drag_int(im_str!("roll rate"), &mut s.rollrate)
|
|
|
|
+ .min(0)
|
|
|
|
+ .max(32)
|
|
|
|
+ .speed(0.01)
|
|
.build();
|
|
.build();
|
|
|
|
|
|
if ui.small_button(&im_str!("adjust speed to pattern")) {
|
|
if ui.small_button(&im_str!("adjust speed to pattern")) {
|
|
if let Some(sd) = s.duration() {
|
|
if let Some(sd) = s.duration() {
|
|
- let ad = active_pattern.duration();
|
|
|
|
|
|
+ let ad = active_pattern.duration(bpm);
|
|
dbg!(&sd.as_millis());
|
|
dbg!(&sd.as_millis());
|
|
let scale = sd.as_millis() as f32 / ad as f32;
|
|
let scale = sd.as_millis() as f32 / ad as f32;
|
|
dbg!(&scale);
|
|
dbg!(&scale);
|
|
@@ -261,7 +278,7 @@ fn main() {
|
|
}
|
|
}
|
|
ui.checkbox(im_str!("reverse"), &mut s.reverse);
|
|
ui.checkbox(im_str!("reverse"), &mut s.reverse);
|
|
|
|
|
|
- if ui.small_button(&im_str!("play")) {s.play(&dev)}
|
|
|
|
|
|
+ if ui.small_button(&im_str!("play")) {s.play(&dev, bpm)}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -274,9 +291,15 @@ fn main() {
|
|
Window::new(im_str!("tracks"))
|
|
Window::new(im_str!("tracks"))
|
|
.size([300.0, 100.0], Condition::FirstUseEver)
|
|
.size([300.0, 100.0], Condition::FirstUseEver)
|
|
.build(ui, || {
|
|
.build(ui, || {
|
|
|
|
+
|
|
|
|
+ ui.drag_int(im_str!("BPM"), &mut bpm)
|
|
|
|
+ .min(1)
|
|
|
|
+ .max(1000)
|
|
|
|
+ .speed(0.01)
|
|
|
|
+ .build();
|
|
|
|
|
|
if ui.small_button(&im_str!("add")) {
|
|
if ui.small_button(&im_str!("add")) {
|
|
- active_pattern.play(&dev);
|
|
|
|
|
|
+ active_pattern.play(&dev, bpm);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|