@@ -4,10 +4,10 @@ use std::io::BufReader;
4
4
use itertools:: Itertools ;
5
5
6
6
use rodio:: source:: ChannelVolume ;
7
- use rodio:: { Decoder , Source } ;
7
+ use rodio:: { queue , Decoder , Source } ;
8
8
9
9
#[ test]
10
- fn tomato ( ) {
10
+ fn no_queue ( ) {
11
11
let file = fs:: File :: open ( "assets/music.mp3" ) . unwrap ( ) ;
12
12
let decoder = Decoder :: new ( BufReader :: new ( file) ) . unwrap ( ) ;
13
13
assert_eq ! ( decoder. channels( ) , 2 ) ;
@@ -17,6 +17,20 @@ fn tomato() {
17
17
assert_output_only_on_channel_1_and_2 ( channel_volume) ;
18
18
}
19
19
20
+ #[ test]
21
+ fn with_queue_in_between ( ) {
22
+ let file = fs:: File :: open ( "assets/music.mp3" ) . unwrap ( ) ;
23
+ let decoder = Decoder :: new ( BufReader :: new ( file) ) . unwrap ( ) ;
24
+ assert_eq ! ( decoder. channels( ) , 2 ) ;
25
+ let channel_volume = ChannelVolume :: new ( decoder, vec ! [ 1.0 , 1.0 , 0.0 , 0.0 , 0.0 , 0.0 ] ) ;
26
+ assert_eq ! ( channel_volume. channels( ) , 6 ) ;
27
+
28
+ let ( controls, queue) = queue:: queue ( false ) ;
29
+ controls. append ( channel_volume) ;
30
+
31
+ assert_output_only_on_channel_1_and_2 ( queue) ;
32
+ }
33
+
20
34
fn assert_output_only_on_channel_1_and_2 ( source : impl Source < Item = i16 > ) {
21
35
for ( frame_number, mut frame) in source. chunks ( 6 ) . into_iter ( ) . enumerate ( ) {
22
36
let frame: [ _ ; 6 ] = frame. next_array ( ) . expect ( & format ! (
@@ -25,7 +39,7 @@ fn assert_output_only_on_channel_1_and_2(source: impl Source<Item = i16>) {
25
39
assert_eq ! (
26
40
& frame[ 2 ..] ,
27
41
& [ 0 , 0 , 0 , 0 ] ,
28
- "frame number {frame_number} had nonzero volume on channels 3,4,5 & 6 "
42
+ "frame {frame_number} had nonzero volume on a channel that should be zero "
29
43
)
30
44
}
31
45
}
0 commit comments