pub struct RpnTracker { /* private fields */ }Expand description
Tracks RPN/NRPN state across all 16 MIDI channels.
This struct is designed for real-time safety:
- Fixed-size array (no heap allocation)
- All operations are O(1)
- Implements
Copyfor simple value semantics
§Usage
Plugins that need to receive RPN/NRPN messages should store an instance
of this tracker in their state and call process_cc for each incoming
Control Change event.
ⓘ
struct MyPlugin {
rpn_tracker: RpnTracker,
}
impl Processor for MyPlugin {
fn process_midi(&mut self, input: &[MidiEvent], output: &mut MidiBuffer) {
for event in input {
if let MidiEventKind::ControlChange(cc) = &event.event {
if let Some(msg) = self.rpn_tracker.process_cc(cc) {
// Handle complete RPN/NRPN message
if msg.is_pitch_bend_sensitivity() {
let (semitones, cents) = msg.pitch_bend_sensitivity();
self.pitch_bend_range = semitones as f32 + cents as f32 / 100.0;
}
}
}
}
}
}Implementations§
Source§impl RpnTracker
impl RpnTracker
Sourcepub fn reset_channel(&mut self, channel: MidiChannel)
pub fn reset_channel(&mut self, channel: MidiChannel)
Reset a specific channel’s state.
Sourcepub fn process_cc(
&mut self,
cc: &ControlChange,
) -> Option<ParameterNumberMessage>
pub fn process_cc( &mut self, cc: &ControlChange, ) -> Option<ParameterNumberMessage>
Process a Control Change event.
Returns Some(ParameterNumberMessage) when a complete RPN/NRPN
message has been assembled from the CC sequence.
§Arguments
cc- The Control Change event to process
§Returns
Nonefor non-RPN/NRPN CCs or incomplete sequencesSome(message)when a complete RPN/NRPN is ready
Sourcepub fn current_parameter(
&self,
channel: MidiChannel,
) -> Option<(ParameterNumberKind, u16)>
pub fn current_parameter( &self, channel: MidiChannel, ) -> Option<(ParameterNumberKind, u16)>
Get the currently selected parameter for a channel, if any.
Trait Implementations§
Source§impl Clone for RpnTracker
impl Clone for RpnTracker
Source§fn clone(&self) -> RpnTracker
fn clone(&self) -> RpnTracker
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for RpnTracker
impl Debug for RpnTracker
Source§impl Default for RpnTracker
impl Default for RpnTracker
impl Copy for RpnTracker
Auto Trait Implementations§
impl Freeze for RpnTracker
impl RefUnwindSafe for RpnTracker
impl Send for RpnTracker
impl Sync for RpnTracker
impl Unpin for RpnTracker
impl UnwindSafe for RpnTracker
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more