20
20
//! a simple and familiar API.
21
21
22
22
use { Duplex , Frame , Sample , Vec , Rc , VecDeque } ;
23
- use rate ;
23
+ use interpolate :: { Converter , Interpolator } ;
24
24
use core;
25
25
26
26
@@ -219,19 +219,23 @@ pub trait Signal: Iterator + Sized
219
219
/// extern crate sample;
220
220
///
221
221
/// use sample::Signal;
222
+ /// use sample::interpolate::Linear;
222
223
///
223
224
/// fn main() {
224
225
/// let foo = [[0.0], [1.0], [0.0], [-1.0]];
225
226
/// let mul = [1.0, 1.0, 0.5, 0.5, 0.5, 0.5];
226
- /// let frames: Vec<_> = foo.iter().cloned().mul_hz(mul.iter().cloned()).collect();
227
- /// assert_eq!(&frames[..], &[[0.0], [1.0], [0.0], [-0.5], [-1.0]][..]);
227
+ /// let mut source = foo.iter().cloned();
228
+ /// let interp = Linear::from_source(&mut source).unwrap();
229
+ /// let frames: Vec<_> = source.mul_hz(interp, mul.iter().cloned()).collect();
230
+ /// assert_eq!(&frames[..], &[[0.0], [1.0], [0.0], [-0.5], [-1.0], [-0.5]][..]);
228
231
/// }
229
232
/// ```
230
- fn mul_hz < I > ( self , mul_per_frame : I ) -> MulHz < Self , I >
231
- where I : Iterator < Item =f64 > ,
233
+ fn mul_hz < M , I > ( self , interpolator : I , mul_per_frame : M ) -> MulHz < Self , M , I >
234
+ where M : Iterator < Item =f64 > ,
235
+ I : Interpolator ,
232
236
{
233
237
MulHz {
234
- signal : rate :: Converter :: scale_playback_hz ( self , 1.0 ) ,
238
+ signal : Converter :: scale_playback_hz ( self , interpolator , 1.0 ) ,
235
239
mul_per_frame : mul_per_frame,
236
240
}
237
241
}
@@ -244,15 +248,20 @@ pub trait Signal: Iterator + Sized
244
248
/// extern crate sample;
245
249
///
246
250
/// use sample::Signal;
251
+ /// use sample::interpolate::Linear;
247
252
///
248
253
/// fn main() {
249
254
/// let foo = [[0.0], [1.0], [0.0], [-1.0]];
250
- /// let frames: Vec<_> = foo.iter().cloned().from_hz_to_hz(1.0, 2.0).collect();
251
- /// assert_eq!(&frames[..], &[[0.0], [0.5], [1.0], [0.5], [0.0], [-0.5], [-1.0]][..]);
255
+ /// let mut source = foo.iter().cloned();
256
+ /// let interp = Linear::from_source(&mut source).unwrap();
257
+ /// let frames: Vec<_> = source.from_hz_to_hz(interp, 1.0, 2.0).collect();
258
+ /// assert_eq!(&frames[..], &[[0.0], [0.5], [1.0], [0.5], [0.0], [-0.5], [-1.0], [-0.5]][..]);
252
259
/// }
253
260
/// ```
254
- fn from_hz_to_hz ( self , source_hz : f64 , target_hz : f64 ) -> rate:: Converter < Self > {
255
- rate:: Converter :: from_hz_to_hz ( self , source_hz, target_hz)
261
+ fn from_hz_to_hz < I > ( self , interpolator : I , source_hz : f64 , target_hz : f64 ) -> Converter < Self , I >
262
+ where I : Interpolator ,
263
+ {
264
+ Converter :: from_hz_to_hz ( self , interpolator, source_hz, target_hz)
256
265
}
257
266
258
267
/// Multiplies the rate at which frames of the `Signal` are yielded by the given value.
@@ -263,15 +272,20 @@ pub trait Signal: Iterator + Sized
263
272
/// extern crate sample;
264
273
///
265
274
/// use sample::Signal;
275
+ /// use sample::interpolate::Linear;
266
276
///
267
277
/// fn main() {
268
278
/// let foo = [[0.0], [1.0], [0.0], [-1.0]];
269
- /// let frames: Vec<_> = foo.iter().cloned().scale_hz(0.5).collect();
270
- /// assert_eq!(&frames[..], &[[0.0], [0.5], [1.0], [0.5], [0.0], [-0.5], [-1.0]][..]);
279
+ /// let mut source = foo.iter().cloned();
280
+ /// let interp = Linear::from_source(&mut source).unwrap();
281
+ /// let frames: Vec<_> = source.scale_hz(interp, 0.5).collect();
282
+ /// assert_eq!(&frames[..], &[[0.0], [0.5], [1.0], [0.5], [0.0], [-0.5], [-1.0], [-0.5]][..]);
271
283
/// }
272
284
/// ```
273
- fn scale_hz ( self , multi : f64 ) -> rate:: Converter < Self > {
274
- rate:: Converter :: scale_playback_hz ( self , multi)
285
+ fn scale_hz < I > ( self , interpolator : I , multi : f64 ) -> Converter < Self , I >
286
+ where I : Interpolator ,
287
+ {
288
+ Converter :: scale_playback_hz ( self , interpolator, multi)
275
289
}
276
290
277
291
/// Delays the `Signal` by the given number of frames.
@@ -560,11 +574,12 @@ pub struct ScaleAmpPerChannel<S, F> {
560
574
/// This happens by wrapping `self` in a `rate::Converter` and calling `set_playback_hz_scale`
561
575
/// with the value yielded by `signal`
562
576
#[ derive( Clone ) ]
563
- pub struct MulHz < S , M >
577
+ pub struct MulHz < S , M , I >
564
578
where S : Signal ,
565
579
S :: Item : Frame ,
580
+ I : Interpolator ,
566
581
{
567
- signal : rate :: Converter < S > ,
582
+ signal : Converter < S , I > ,
568
583
mul_per_frame : M ,
569
584
}
570
585
@@ -1522,11 +1537,12 @@ impl<S, F> ExactSizeIterator for OffsetAmpPerChannel<S, F>
1522
1537
}
1523
1538
1524
1539
1525
- impl < S , M > Iterator for MulHz < S , M >
1540
+ impl < S , M , I > Iterator for MulHz < S , M , I >
1526
1541
where S : Signal ,
1527
1542
S :: Item : Frame ,
1528
1543
<S :: Item as Frame >:: Sample : Duplex < f64 > ,
1529
1544
M : Iterator < Item =f64 > ,
1545
+ I : Interpolator < Frame =<S as Iterator >:: Item > ,
1530
1546
{
1531
1547
type Item = S :: Item ;
1532
1548
#[ inline]
0 commit comments