|
@@ -57,6 +57,7 @@ impl Sound {
|
|
location: sanitized_name.clone(),
|
|
location: sanitized_name.clone(),
|
|
volume: 1.0,
|
|
volume: 1.0,
|
|
speed: 1.0,
|
|
speed: 1.0,
|
|
|
|
+ roll: 0,
|
|
..Default::default()
|
|
..Default::default()
|
|
})
|
|
})
|
|
}
|
|
}
|
|
@@ -105,23 +106,47 @@ impl Sound {
|
|
|
|
|
|
pub fn play(&self, device: &rodio::Device) {
|
|
pub fn play(&self, device: &rodio::Device) {
|
|
|
|
|
|
- let decoder = match self.reverse {
|
|
|
|
- false => Decoder::new(self.cursor()),
|
|
|
|
- true => Decoder::new(self.cursor_rev()),
|
|
|
|
- };
|
|
|
|
|
|
+ if self.roll == 0 {
|
|
|
|
+ match Decoder::new(self.cursor()) {
|
|
|
|
+ Ok(ok_decoder) => {
|
|
|
|
+
|
|
|
|
+ rodio::play_raw(&device, ok_decoder
|
|
|
|
+ .speed(self.speed)
|
|
|
|
+ .amplify(self.volume)
|
|
|
|
+ .convert_samples());
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ Err(e) => {
|
|
|
|
+ dbg!(e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- match decoder {
|
|
|
|
- Ok(ok_decoder) => {
|
|
|
|
- rodio::play_raw(&device, ok_decoder
|
|
|
|
- .speed(self.speed)
|
|
|
|
- .amplify(self.volume)
|
|
|
|
- .convert_samples());
|
|
|
|
|
|
+ } else {
|
|
|
|
+ let delay = 100;
|
|
|
|
+ for _ in 0..self.roll+1 {
|
|
|
|
+
|
|
|
|
+ match Decoder::new(self.cursor()) {
|
|
|
|
+ Ok(ok_decoder) => {
|
|
|
|
+
|
|
|
|
+ rodio::play_raw(&device, ok_decoder
|
|
|
|
+ .speed(self.speed)
|
|
|
|
+ .amplify(self.volume)
|
|
|
|
+ .take_duration(Duration::from_millis(delay))
|
|
|
|
+ .convert_samples());
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ Err(e) => {
|
|
|
|
+ dbg!(e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ thread::sleep(Duration::from_millis(delay));
|
|
|
|
|
|
}
|
|
}
|
|
- Err(e) => {
|
|
|
|
- dbg!(e);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|