Skip to content

Commit 7d840bb

Browse files
committed
Fix SystemReset deserialization
1 parent f1e3126 commit 7d840bb

File tree

4 files changed

+23
-5
lines changed

4 files changed

+23
-5
lines changed

src/context.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ use super::{MidiMsg, TimeCode};
1212
/// messages.
1313
#[derive(Debug, Clone, PartialEq, Default)]
1414
pub struct ReceiverContext {
15-
pub previous_channel_message: Option<MidiMsg>,
16-
pub time_code: TimeCode,
17-
pub is_smf_sysex: bool,
15+
pub(crate) previous_channel_message: Option<MidiMsg>,
16+
pub(crate) time_code: TimeCode,
17+
pub(crate) is_smf_sysex: bool,
18+
pub(crate) parsing_smf: bool,
1819
/// If true, CC messages will be treated as complex CC messages, with their semantics taken from the Midi spec. Otherwise, they will be treated as simple CC messages - i.e. [`ControlChange::CC`](crate::ControlChange::CC).
1920
pub complex_cc: bool,
2021
}
@@ -29,4 +30,9 @@ impl ReceiverContext {
2930
self.complex_cc = true;
3031
self
3132
}
33+
34+
pub(crate) fn parsing_smf(mut self) -> Self {
35+
self.parsing_smf = true;
36+
self
37+
}
3238
}

src/file.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ impl Track {
414414
ctx.add_track(Self::Midi(vec![]));
415415
ctx.advance(8);
416416
ctx.track_length(len);
417-
let reciever_ctx = &mut ReceiverContext::default();
417+
let reciever_ctx = &mut ReceiverContext::default().parsing_smf();
418418

419419
let mut i = 0;
420420
let mut last_beat_or_frame = 0.0;

src/message.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ impl MidiMsg {
166166
}
167167
#[cfg(not(feature = "sysex"))]
168168
return Err(ParseError::SystemExclusiveDisabled);
169-
} else if b & 0b00001111 == 0xF {
169+
} else if b & 0b00001111 == 0xF && ctx.parsing_smf {
170170
#[cfg(feature = "file")]
171171
{
172172
let (msg, len) = Meta::from_midi(m)?;

src/system_real_time.rs

+12
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,16 @@ mod tests {
7474
&mut ctx,
7575
);
7676
}
77+
78+
#[test]
79+
fn serde_system_reset() {
80+
let system_reset = MidiMsg::SystemRealTime {
81+
msg: SystemRealTimeMsg::SystemReset,
82+
};
83+
println!("{:?}", system_reset.to_midi());
84+
assert_eq!(
85+
MidiMsg::from_midi_with_context(&system_reset.to_midi(), &mut ReceiverContext::new()),
86+
Ok((system_reset, 1)),
87+
);
88+
}
7789
}

0 commit comments

Comments
 (0)