pub enum Track {
Midi(MidiTrack),
Audio(AudioTrack),
}Expand description
Wrapper type allowing processors to operate on MIDI or audio data.
Variants§
Midi(MidiTrack)
Audio(AudioTrack)
Implementations§
Source§impl Track
impl Track
Sourcepub fn from_midi<P: AsRef<Path>>(path: P) -> Result<Self>
pub fn from_midi<P: AsRef<Path>>(path: P) -> Result<Self>
Load a MIDI track from a lightweight text representation where each line contains note velocity.
Sourcepub fn from_audio(samples: Vec<f32>, sample_rate: u32) -> Self
pub fn from_audio(samples: Vec<f32>, sample_rate: u32) -> Self
Construct an audio track from samples and a sample rate.
Examples found in repository?
examples/audio_gain.rs (line 5)
2fn main() -> humster::Result<()> {
3 use humster::prelude::*;
4
5 let mut track = Track::from_audio(vec![0.1, -0.3, 0.5], 48_000);
6
7 struct Gain(f32);
8
9 impl Processor for Gain {
10 fn process_audio(&self, track: &mut AudioTrack) {
11 for sample in track.samples.iter_mut() {
12 *sample *= self.0;
13 }
14 }
15 }
16
17 let gain = Gain(1.5);
18 track.apply(&gain);
19
20 if let Some(audio) = track.as_audio() {
21 println!("Sample rate: {}", audio.sample_rate);
22 for (idx, sample) in audio.samples.iter().enumerate() {
23 println!("Sample #{idx}: {sample:.3}");
24 }
25 }
26
27 Ok(())
28}Sourcepub fn apply<P: Processor>(&mut self, processor: &P)
pub fn apply<P: Processor>(&mut self, processor: &P)
Apply a processor to the underlying track representation.
Examples found in repository?
examples/audio_gain.rs (line 18)
2fn main() -> humster::Result<()> {
3 use humster::prelude::*;
4
5 let mut track = Track::from_audio(vec![0.1, -0.3, 0.5], 48_000);
6
7 struct Gain(f32);
8
9 impl Processor for Gain {
10 fn process_audio(&self, track: &mut AudioTrack) {
11 for sample in track.samples.iter_mut() {
12 *sample *= self.0;
13 }
14 }
15 }
16
17 let gain = Gain(1.5);
18 track.apply(&gain);
19
20 if let Some(audio) = track.as_audio() {
21 println!("Sample rate: {}", audio.sample_rate);
22 for (idx, sample) in audio.samples.iter().enumerate() {
23 println!("Sample #{idx}: {sample:.3}");
24 }
25 }
26
27 Ok(())
28}More examples
examples/midi_input.rs (line 22)
2fn main() -> humster::Result<()> {
3 use humster::prelude::*;
4
5 let mut track = Track::Midi(MidiTrack::new(vec![
6 MidiEvent::new(60, 80),
7 MidiEvent::new(64, 90),
8 ]));
9
10 struct VelocityBoost(f32);
11
12 impl Processor for VelocityBoost {
13 fn process_midi(&self, track: &mut MidiTrack) {
14 for event in track.events.iter_mut() {
15 let boosted = (event.velocity as f32 * self.0).round() as u32;
16 event.velocity = boosted.min(127) as u8;
17 }
18 }
19 }
20
21 let boost = VelocityBoost(1.25);
22 track.apply(&boost);
23
24 if let Some(midi) = track.as_midi() {
25 for (idx, event) in midi.events().iter().enumerate() {
26 println!("Event #{idx}: note {}, velocity {}", event.note, event.velocity);
27 }
28 }
29
30 Ok(())
31}Sourcepub fn export<P: AsRef<Path>>(&self, path: P) -> Result<()>
pub fn export<P: AsRef<Path>>(&self, path: P) -> Result<()>
Export a track to the lightweight text formats understood by from_midi and from_audio.
Sourcepub fn as_midi(&self) -> Option<&MidiTrack>
pub fn as_midi(&self) -> Option<&MidiTrack>
Returns the contained MIDI track if present.
Examples found in repository?
examples/midi_input.rs (line 24)
2fn main() -> humster::Result<()> {
3 use humster::prelude::*;
4
5 let mut track = Track::Midi(MidiTrack::new(vec![
6 MidiEvent::new(60, 80),
7 MidiEvent::new(64, 90),
8 ]));
9
10 struct VelocityBoost(f32);
11
12 impl Processor for VelocityBoost {
13 fn process_midi(&self, track: &mut MidiTrack) {
14 for event in track.events.iter_mut() {
15 let boosted = (event.velocity as f32 * self.0).round() as u32;
16 event.velocity = boosted.min(127) as u8;
17 }
18 }
19 }
20
21 let boost = VelocityBoost(1.25);
22 track.apply(&boost);
23
24 if let Some(midi) = track.as_midi() {
25 for (idx, event) in midi.events().iter().enumerate() {
26 println!("Event #{idx}: note {}, velocity {}", event.note, event.velocity);
27 }
28 }
29
30 Ok(())
31}Sourcepub fn as_midi_mut(&mut self) -> Option<&mut MidiTrack>
pub fn as_midi_mut(&mut self) -> Option<&mut MidiTrack>
Returns the contained MIDI track mutably if present.
Sourcepub fn as_audio(&self) -> Option<&AudioTrack>
pub fn as_audio(&self) -> Option<&AudioTrack>
Returns the contained audio track if present.
Examples found in repository?
examples/audio_gain.rs (line 20)
2fn main() -> humster::Result<()> {
3 use humster::prelude::*;
4
5 let mut track = Track::from_audio(vec![0.1, -0.3, 0.5], 48_000);
6
7 struct Gain(f32);
8
9 impl Processor for Gain {
10 fn process_audio(&self, track: &mut AudioTrack) {
11 for sample in track.samples.iter_mut() {
12 *sample *= self.0;
13 }
14 }
15 }
16
17 let gain = Gain(1.5);
18 track.apply(&gain);
19
20 if let Some(audio) = track.as_audio() {
21 println!("Sample rate: {}", audio.sample_rate);
22 for (idx, sample) in audio.samples.iter().enumerate() {
23 println!("Sample #{idx}: {sample:.3}");
24 }
25 }
26
27 Ok(())
28}Sourcepub fn as_audio_mut(&mut self) -> Option<&mut AudioTrack>
pub fn as_audio_mut(&mut self) -> Option<&mut AudioTrack>
Returns the contained audio track mutably if present.
Trait Implementations§
impl StructuralPartialEq for Track
Auto Trait Implementations§
impl Freeze for Track
impl RefUnwindSafe for Track
impl Send for Track
impl Sync for Track
impl Unpin for Track
impl UnwindSafe for Track
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