monitor.rs 715 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. use super::*;
  2. use synth::SampleBuffer;
  3. use std::collections::HashMap;
  4. pub struct VoiceDatum {
  5. pitch: Pitch,
  6. ampl: f32,
  7. }
  8. pub enum Datum {
  9. Voices(Vec<VoiceDatum>),
  10. Samples(SampleBuffer),
  11. Playtime(f32, f32),
  12. }
  13. pub enum DatumKind {
  14. Voices,
  15. Samples,
  16. Playtime,
  17. }
  18. impl<'a> From<&'a Datum> for DatumKind {
  19. fn from(d: &'a Datum) -> DatumKind {
  20. match *d {
  21. Datum::Voices(_) => DatumKind::Voices,
  22. Datum::Samples(_) => DatumKind::Samples,
  23. Datum::Playtime(_, _) => DatumKind::Playtime,
  24. }
  25. }
  26. }
  27. pub type Data = HashMap<DatumKind, Datum>;
  28. pub trait Monitor {
  29. fn process(&mut self, data: &Data);
  30. }
  31. pub type MonBox = Box<Monitor>;