Feat: improving MIDI
This commit is contained in:
@@ -230,6 +230,52 @@ fn test_midi_continue() {
|
||||
assert_eq!(outputs[0], "/midi/continue/dev/0");
|
||||
}
|
||||
|
||||
// at (delta) tests
|
||||
#[test]
|
||||
fn test_midi_at_single_delta() {
|
||||
let outputs = expect_outputs("0.5 at 60 note m.", 1);
|
||||
assert!(outputs[0].contains("/note/60/"));
|
||||
assert!(outputs[0].contains("/delta/"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_midi_at_multiple_deltas() {
|
||||
let outputs = expect_outputs("0 0.5 at 60 note m.", 2);
|
||||
assert!(outputs[0].contains("/note/60/"));
|
||||
assert!(outputs[1].contains("/note/60/"));
|
||||
assert!(outputs[1].contains("/delta/"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_midi_at_with_polyphony() {
|
||||
// 2 notes × 2 deltas = 4 events
|
||||
expect_outputs("0 0.5 at 60 64 note m.", 4);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_midi_arp_notes() {
|
||||
let outputs = expect_outputs("c4 e4 g4 arp note m.", 3);
|
||||
assert!(outputs[0].contains("/note/60/"));
|
||||
assert!(outputs[1].contains("/note/64/"));
|
||||
assert!(outputs[2].contains("/note/67/"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_midi_arp_with_at() {
|
||||
let outputs = expect_outputs("0 0.25 0.5 at c4 e4 g4 arp note m.", 3);
|
||||
assert!(outputs[0].contains("/note/60/"));
|
||||
assert!(outputs[1].contains("/note/64/"));
|
||||
assert!(outputs[2].contains("/note/67/"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_midi_at_cc() {
|
||||
let outputs = expect_outputs("0 0.5 at 1 ccnum 64 ccout m.", 2);
|
||||
assert!(outputs[0].contains("/midi/cc/1/64/"));
|
||||
assert!(outputs[1].contains("/midi/cc/1/64/"));
|
||||
assert!(outputs[1].contains("/delta/"));
|
||||
}
|
||||
|
||||
// Test message type priority (first matching type wins)
|
||||
#[test]
|
||||
fn test_midi_message_priority_cc_over_note() {
|
||||
@@ -286,3 +332,34 @@ fn test_midi_note_duration_with_speed() {
|
||||
let outputs = f.evaluate("60 note m.", &ctx).unwrap();
|
||||
assert!(outputs[0].contains("/dur/0.0625"));
|
||||
}
|
||||
|
||||
// Polyphonic MIDI tests
|
||||
#[test]
|
||||
fn test_midi_polyphonic_notes() {
|
||||
let outputs = expect_outputs("60 64 67 note m.", 3);
|
||||
assert!(outputs[0].contains("/midi/note/60/"));
|
||||
assert!(outputs[1].contains("/midi/note/64/"));
|
||||
assert!(outputs[2].contains("/midi/note/67/"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_midi_polyphonic_notes_with_velocity() {
|
||||
let outputs = expect_outputs("60 64 67 note 100 80 60 velocity m.", 3);
|
||||
assert!(outputs[0].contains("/note/60/vel/100/"));
|
||||
assert!(outputs[1].contains("/note/64/vel/80/"));
|
||||
assert!(outputs[2].contains("/note/67/vel/60/"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_midi_polyphonic_channel() {
|
||||
let outputs = expect_outputs("60 note 1 2 chan m.", 2);
|
||||
assert!(outputs[0].contains("/note/60/") && outputs[0].contains("/chan/0"));
|
||||
assert!(outputs[1].contains("/note/60/") && outputs[1].contains("/chan/1"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_midi_polyphonic_cc() {
|
||||
let outputs = expect_outputs("1 2 ccnum 64 127 ccout m.", 2);
|
||||
assert!(outputs[0].contains("/midi/cc/1/64/"));
|
||||
assert!(outputs[1].contains("/midi/cc/2/127/"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user