param.rs 941 B

123456789101112131415161718192021222324252627282930313233
  1. use super::*;
  2. #[derive(Debug)]
  3. pub struct Param {
  4. pub name: String,
  5. pub default: Sample,
  6. pub buf: SampleBuffer,
  7. }
  8. impl Generator for Param {
  9. fn eval<'a>(&'a mut self, params: &Parameters) -> &'a SampleBuffer {
  10. self.buf.set(*params.vars.get(&self.name).unwrap_or(&self.default));
  11. &self.buf
  12. }
  13. fn buffer(&self) -> &SampleBuffer { &self.buf }
  14. fn set_buffer(&mut self, buf: SampleBuffer) -> SampleBuffer {
  15. mem::replace(&mut self.buf, buf)
  16. }
  17. }
  18. pub struct ParamFactory;
  19. impl GeneratorFactory for ParamFactory {
  20. fn new(&self, params: &mut FactoryParameters) -> Result<GenBox, GenFactoryError> {
  21. Ok(Box::new(Param {
  22. name: params.get_req_param("name", 0)?.as_string()?,
  23. default: params.get_param("default", 1, &ParamValue::Float(0.0)).as_f32()?,
  24. buf: SampleBuffer::new(1),
  25. }))
  26. }
  27. }
  28. pub static Factory: ParamFactory = ParamFactory;