mirror of
https://github.com/storytold/soundcraft.git
synced 2026-10-26 11:36:51 -06:00
39 lines
1.5 KiB
Rust
39 lines
1.5 KiB
Rust
//! The MIDI Editor's Quantize button snaps to the grid the editor shows.
|
|
use egui::vec2;
|
|
use egui_kittest::{Harness, kittest::Queryable};
|
|
use serde_json::json;
|
|
use soundcraft_ui_egui::{Services, SoundApp};
|
|
|
|
fn quantize_on(grid: &str) -> i64 {
|
|
let mut app = SoundApp::new(soundcraft_engine::Engine::default(), None, Services::default());
|
|
app.run("track.new", json!({"name": "Grid Check", "kind": "midi"})).unwrap();
|
|
let clip = app.run("midi.new_clip", json!({"track": "Grid Check", "start": 0, "end": 96_000})).unwrap()["clip"].clone();
|
|
app.run("midi.note_add", json!({"clip": clip, "pitch": 60, "start_ticks": 300, "length_ticks": 240})).unwrap();
|
|
app.run("edit.select", json!({"clips": [clip]})).unwrap();
|
|
app.run("view.grid", json!({"value": grid})).unwrap();
|
|
app.ui.show_midi_editor = true;
|
|
let mut h = Harness::builder().with_size(vec2(1600.0, 1000.0)).build_ui_state(
|
|
|ui, app: &mut SoundApp| {
|
|
app.logic(&ui.ctx().clone());
|
|
app.ui(ui);
|
|
},
|
|
app,
|
|
);
|
|
h.run_steps(5);
|
|
h.get_by_label("Quantize").click();
|
|
h.run_steps(3);
|
|
let notes = h.state_mut().run("midi.notes", json!({"clip": clip})).unwrap();
|
|
assert_eq!(notes["notes"][0]["length"], 240, "{notes}");
|
|
notes["notes"][0]["start"].as_i64().unwrap()
|
|
}
|
|
|
|
#[test]
|
|
fn quantize_follows_a_quarter_note_grid() {
|
|
assert_eq!(quantize_on("1/4"), 0);
|
|
}
|
|
|
|
#[test]
|
|
fn quantize_follows_a_sixteenth_note_grid() {
|
|
assert_eq!(quantize_on("1/16"), 240);
|
|
}
|