Skip to content

Commit 26f68b4

Browse files
committed
Stop spamming unnecessary midi messages
1 parent 0d13278 commit 26f68b4

File tree

1 file changed

+32
-12
lines changed

1 file changed

+32
-12
lines changed

midi-udp-widgets-app/src/main.rs

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,20 @@ fn main() {
5858
match cli.command {
5959
Command::Button => {
6060
let mut button = Button::new(cli.title.as_deref()).unwrap();
61+
let mut prev_pressed = false;
6162
loop {
6263
button.tick().unwrap();
63-
let key = Note::default().to_midi_index().into();
64-
let message = if button.pressed() {
65-
MidiMessage::NoteOn { key, vel: 0.into() }
66-
} else {
67-
MidiMessage::NoteOff { key, vel: 0.into() }
68-
};
69-
client.send(MidiEvent { channel, message }).unwrap();
64+
let pressed = button.pressed();
65+
if pressed != prev_pressed {
66+
let key = Note::default().to_midi_index().into();
67+
let message = if button.pressed() {
68+
MidiMessage::NoteOn { key, vel: 0.into() }
69+
} else {
70+
MidiMessage::NoteOff { key, vel: 0.into() }
71+
};
72+
client.send(MidiEvent { channel, message }).unwrap();
73+
prev_pressed = pressed;
74+
}
7075
}
7176
}
7277
Command::Knob {
@@ -110,27 +115,42 @@ fn main() {
110115
y: axis_label_y,
111116
};
112117
let mut xy = Xy::new(cli.title.as_deref(), axis_labels).unwrap();
113-
loop {
114-
xy.tick().unwrap();
115-
let (x, y) = xy.value_midi();
118+
let send_x = |value| {
116119
client
117120
.send(MidiEvent {
118121
channel,
119122
message: MidiMessage::Controller {
120123
controller: controller_x.into(),
121-
value: x,
124+
value,
122125
},
123126
})
124127
.unwrap();
128+
};
129+
let send_y = |value| {
125130
client
126131
.send(MidiEvent {
127132
channel,
128133
message: MidiMessage::Controller {
129134
controller: controller_y.into(),
130-
value: y,
135+
value,
131136
},
132137
})
133138
.unwrap();
139+
};
140+
let (mut prev_x, mut prev_y) = xy.value_midi();
141+
send_x(prev_x);
142+
send_y(prev_y);
143+
loop {
144+
xy.tick().unwrap();
145+
let (x, y) = xy.value_midi();
146+
if x != prev_x {
147+
send_x(x);
148+
prev_x = x;
149+
}
150+
if y != prev_y {
151+
send_y(y);
152+
prev_y = y;
153+
}
134154
}
135155
}
136156
Command::ComputerKeyboard { start_note } => {

0 commit comments

Comments
 (0)