shizen_buffers/midi/
midi_buffer.rs1use std::ops::{Deref, DerefMut};
2
3use super::midi_message::MidiMessage;
4
5pub type MidiMessageBytes = [u8; 3];
6pub type _MidiEvent = (u64, MidiMessageBytes);
7
8#[derive(Debug, Clone, PartialEq, PartialOrd, Hash)]
9pub struct MidiBuffer {
10 pub(crate) messages: Vec<MidiMessage>,
11}
12
13impl Deref for MidiBuffer {
14 type Target = Vec<MidiMessage>;
15
16 fn deref(&self) -> &Self::Target {
17 &self.messages
18 }
19}
20
21impl DerefMut for MidiBuffer {
22 fn deref_mut(&mut self) -> &mut Self::Target {
23 &mut self.messages
24 }
25}
26
27impl MidiBuffer {
28 pub const fn new() -> Self {
29 Self {
30 messages: Vec::new(),
31 }
32 }
33
34 pub fn transpose(&mut self, interval: i8) {
35 self.messages.iter_mut().for_each(|m| m.transpose(interval));
36 }
37}
38
39impl FromIterator<MidiMessageBytes> for MidiBuffer {
40 fn from_iter<T: IntoIterator<Item = MidiMessageBytes>>(iter: T) -> Self {
41 Self {
42 messages: iter.into_iter().map(MidiMessage::from_bytes).collect(),
43 }
44 }
45}
46
47impl FromIterator<MidiMessage> for MidiBuffer {
48 fn from_iter<T: IntoIterator<Item = MidiMessage>>(iter: T) -> Self {
49 Self {
50 messages: iter.into_iter().collect(),
51 }
52 }
53}
54
55impl crate::Buffer for MidiBuffer {}
56